相信许多VB编程人员对ME.ENABLE非常熟悉了,http://www.shengfang.org根据微软的MSDN说明:返回或设置一个值,该值用来确定一个窗体或控件是否能够对用户产生的事件作出反应,每每我们需要进行一些时间较长的后台操作的时候,都习惯于开始加入ME.ENABLE=FALSE语句,使用户不能对窗体进行操作,以避免干扰,最后再加入ME.ENABLE=TRUE语句,http://www.shengfang.org将窗体的控制交还给用户。 首先我新建一个VB工程,http://www.shengfang.org在窗体加入一个按钮,加入如下代码: Private Sub Command1_Click() MsgBox "Command1_Click" Me.Enabled = False End Sub 运行工程后,点击按钮,http://www.shengfang.org确定弹出的对话框,这时无论你怎样点击鼠标,按钮都没有反应了,看到这里,你也许会奇怪,这不是很正常吗? 且慢,你有没有注意到按钮其实并非处于非激活状态(没有变灰),并且由于鼠标的点击,正处于选中状态(按钮周围有一圈黑点),http://www.shengfang.org只要你轻轻的按下空格键或者回车键,呵呵,是不是又看到了弹出的对话框? 这下你没话说了,不急,还不仅仅只有空格键这个问题,你试一试用鼠标点击窗体的关闭的按钮,没有反应,对吧,不要吃惊,你再按下“ALT+F4”组合键试一试,呵呵,窗体照样关闭了吧。 也许这个属性http://www.shengfang.org只是屏蔽的窗体对鼠标的反应,而并没有考虑到对键盘按键的屏蔽,下面是我对这两个问题的解决方法。 ‘参数分别传递窗体对象以及设置窗体有效或无效http://www.shengfang.org Dim i As Integer f.Enabled = b For i = 0 To f.Controls.Count – 1 ‘遍历窗体的所有控件 If TypeOf f.Controls(i) Is CommandButton Then ‘如果控件类型是按钮,设置ENABLE属性http://www.shengfang.org f.Controls(i).Enabled = b End If Next If b Then Screen.MousePointer = 0 ‘默认鼠标指针 Else Screen.MousePointer = 11‘等待鼠标指针 End If ‘设置窗体的鼠标指针类型 End Sub 现在我们改写代码如下: Private Sub Command1_Click() MsgBox "Command1_Click" FormEnable Me, False End Sub 仍然按下按钮,确定弹出的对话框后,http://www.shengfang.org这时所有的按钮都已经是变灰了,无论怎样点击鼠标、敲击空格键或者回车键,都不会再有对话框弹出了。 二、ALT+F4问题 If Me.Enabled = False Then Cancel = -1 Exit Sub End If End Sub 当窗体被关闭时,会产生UNLOAD事件,这时判断窗体的属性,http://www.shengfang.org如果现在窗体是无效的,那么就取消关闭操作。 这时再次运行程序,如果没有点击按钮,按下ALT+F4键,仍然可以正常可以关闭窗体,如果已经点击按钮,那么再按下ALT+F4键就不会有反应了。http://www.shengfang.org 虽然现在WINDOWS基本已经是鼠标的操作了,但是键盘仍然不可忽视,尤其我们进行编程的时候一定要仔细考虑到键盘,以免产生不必要的错误。 字体:大 中 小 |
![]() | 永久地址 http://www.shengfang.org/blog/p/vb6meenable.php |
![]() | 引用地址 http://www.shengfang.org/blog/tb.php?tb_id=1111037569 |
2005年3月17日13:32星期四 [Dev开发]





