首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

为啥防止子窗体被关闭时设置CANCEL=TRUE不管用

2013-01-06 
为什么防止子窗体被关闭时设置CANCELTRUE不管用为了防止一个子窗体在执行一个耗时的操作时被关闭,在此窗

为什么防止子窗体被关闭时设置CANCEL=TRUE不管用
为了防止一个子窗体在执行一个耗时的操作时被关闭,在此窗体的UNLOAD 和QueryUnload事件中都加了判断

    If Command1.Enabled = False Then Cancel = True (在耗时操作执行时先将command1的enabled属性设置为false)


但是此种方法,在此耗时操作执行时,第一次点击此子窗体的关闭按钮时,正常,没有响应,但是接着第二次点击此子窗体的关闭按钮时,就出来一个关闭整个程序的窗口提示。

怎么样避免此种情况的发生。
[解决办法]
恐怕你第一点时就并没有正常响应,按说你那个耗时的操作要经常调用 Doevents一类的才行
[解决办法]
是MDI子窗体吗?
测试了一下是对的:

'Form1窗体代码
'Form1作为MDI子窗体
Option Explicit

Private Sub Command1_Click()
    Dim i As Long
    Command1.Enabled = False
    For i = 0 To 3333333
        '''''
        DoEvents
    Next
    Command1.Enabled = True
End Sub

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
    If Command1.Enabled = False Then
       Cancel = 1
    Else
       Cancel = 0
    End If
End Sub

[解决办法]
语句没有问题,出错其他地方。
[解决办法]
引用:
非常感谢,但是我的耗时的操作中没有DOEVENTS 语句。


还是加上DoEvents才能达到效果.
毕竟vb是单线程的,在耗时的运算中不能及时处理控件事件,加上DoEvents后会释放部分运行事件给控件.

热点排行