我有个MDI主窗体,在QueryUnload事件中加了退出判断代码。可一编译后,执行退出却提示非法操作。不编译时,在VB解释环境下就正常。并且在其他地方加 END 都可正常结束程序,惟独在QueryUnload事件中有问题,请问高手这是为什么?谢谢。代码如下:
Private Sub MDIForm_QueryUnload(Cancel As Integer, UnloadMode As Integer)
a = MsgBox("是否退出系统?", vbOKCancel + 32)
If a = vbOK Then
   End
Else
   Cancel = 1
End If
End Sub

解决方案 »

  1.   

    不知你的程序使用了api函数没有,如果使用了api函数(特别是进行子类处理)的话,使用end语句有可能会出现问题,建议使用Unload方法
      

  2.   

    楼上说的对,直接用END的话,VB有些收尾工作就不管了。
      

  3.   

    我使用了下面的API函数,可我在END前面加了UNLOAD ME也不行。Private Declare Function GetVolumeInformation& Lib "kernel32" Alias "GetVolumeInformationA" (ByVal lpRootPathName As String, ByVal pVolumeNameBuffer As String, ByVal nVolumeNameSize As Long, lpVolumeSerialNumber As Long, lpMaximumComponentLength As Long, lpFileSystemFlags As Long, ByVal lpFileSystemNameBuffer As String, ByVal nFileSystemNameSize As Long)
    Private Const MAX_FILENAME_LEN = 256
    Public Declare Function ShellExecute Lib "shell32.dll" Alias _
          "ShellExecuteA" (ByVal hWnd As Long, ByVal lpOperation As _
          String, ByVal lpFile As String, ByVal lpParameters As _
          String, ByVal lpDirectory As String, ByVal nShowCmd As _
          Long) As Long
    Public Declare Function SendMessage Lib "user32" Alias _
          "SendMessageA" (ByVal hWnd As Long, ByVal msg As Long, ByVal wParam As _
          Long, ByVal lParam As Long) As Long
    Public Const EM_LIMITTEXT = &HC5
      

  4.   

    我解决了。谢谢二位。把END换成UNLOAD ME 就可以了。
    加分。