1、一个可以接收焦点的控件,在客户端使用的click属性中,被使用msgbox弹出了一个对话框,在对话框完毕后,该控件无法再重新响应keydown和keyascii事件.当时焦点仍然在该控件上.只有切换到其他控件在返回才可以重新响应回该事件.怎么使该控件在对话框弹出后,返回时能够重新响应事件(而且仅仅在MDI的子窗口中出现这种情况,一般窗口则无此现象)?
2、另外一个情况,客户端的keydown事件中被msgbox后,无法再响应keyup事件,怎么解决(而且仅仅在MDI的子窗口中出现这种情况,一般窗口则无此现象)?
2、另外一个情况,客户端的keydown事件中被msgbox后,无法再响应keyup事件,怎么解决(而且仅仅在MDI的子窗口中出现这种情况,一般窗口则无此现象)?
'控件中的代码是这样
Private Sub UserControl_Click()
RaiseEvent Click
End Sub
在客户端,xpbu_click事件中,
private sub xpbu_click
msgbox "pp"
end sub
'下次在控件的KeyDown、KeyUp、KeyPress就不会触发了。所有vb自定义控件都会有这种情况。但仅仅在mdi中的子窗口会有这种问题,一般窗口则没有。当msgbox执行完毕后,焦点应该还是在该控件,(可以检测到activecontrol)但为什么却不会再触发usercontrol_keydown等键盘事件?
可能是事件冻结参考
http://ebook.0451.net/bcrj.htm
第五章,事件--〉事件的冻结
如果控件需要产生不能丢失的事件,则在EventsFrozen 属性设置为false之前,这些事件必须排入事件队列之中
另外msgbox以后,才造成usercontrol以后所有的的键盘事件丢失.那么这个情况又和事件冻结有些区别.像微软的按钮它自己却没有这些问题,是不是微软故意隐藏些什么细节.
但我的控件是做过开发小组用的,不能要求他们不使用msgbox吧.而且vb用msgbox确实比较方面.另外,当子窗体采用模式状态,调用的时候也会出现和msgbox一样的问题,如选择客户窗口等等模式选择窗口.这种情况肯定是有的.
关键的一条还是只有mdi的子窗口才会出现这种情况.