下面是一段关闭系统的代码,但只能关闭最近的一个窗体,而无法关闭前面打开的几个窗体,不知为什么?怎样才能在关闭系统的同时,关闭前面打开的所有窗体,彻底退出系统。
现在用的关闭系统代码如下:
Private Sub cdtc_Click()
If MsgBox("你确实要退出吗?", vbYesNo + vbExclamation, "系统询问") = vbYes Then
   Unload Me
     End
   Else
   Cancel = True
    End If
End Sub
注:偶的软件,所有打开窗体都是用exe窗体文件,不知关闭代码的设置是否与这有关?

解决方案 »

  1.   

    Private Sub cdtc_Click()
    dim f as form
    If MsgBox("你确实要退出吗?", vbYesNo + vbExclamation, "系统询问") = vbYes Then
       for each f in forms
         unload f
       next
       end
       Else
       Cancel = True
        End If
    End Sub
      

  2.   

    你所说的窗体是各自独立的 EXE 文件吗?如果是:Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPrivate Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As LongPrivate Const WM_CLOSE As Long = &H10Private Sub cdtc_Click()
    Dim i As Integer, h As Long
    If MsgBox("你确实要退出吗?", vbYesNo + vbExclamation, "系统询问") = vbYes Then
       '假定你已经将你启动的窗体的 Caption 保存在 List1 中
       For i = 0 To List1.ListCount - 1
          h = FindWindow(0&, List1.List(i))
          If h Then SendMessage h, WM_CLOSE, 0, 0 
       Next i   Unload Me
       End
    Else
       Cancel = True
    End If
    End Sub
      

  3.   

    楼主应该说的是楼上那种情况,
    但是不知道有没有保存其他窗体的caption
    呵呵
      

  4.   

    谢谢of123,偶将打开的Caption保存在List1中,运行后,出现下面情况:提示框说什么未定义是何故?
    Private Sub cdtc_Click()'(这一行出现黄底)
    Dim i As Integer, h As Long
    If MsgBox("你确实要退出吗?", vbYesNo + vbExclamation, "系统询问") = vbYes Then
       '假定你已经将你启动的窗体的 Caption 保存在 List1 中
       For i = 0 To List1.ListCount - 1
          h = FindWindow(0&, List1.List(i))'(这一行的FindWindow出现兰底)
          If h Then SendMessage h, WM_CLOSE, 0, 0 
       Next i
      

  5.   

    楼上Of123的办法也是逼出来的,这个方法很多意外情况会发生的,而且那个方法所说的List1也不知道应该放在哪个窗体好。
    我实在不明白为什么会所有的窗体都是独立的EXE文件,请问楼主这样做的目的何在呢?
      

  6.   

    回答楼上朋友问题,如有不妥,请指正;
    1、由5000多张图片组成的60个专题(60个文件夹)每个文件夹内有近百张图片,并含该图片的放大窗口及文字说明。因此一个工程内就有一百多个大小窗体,于是采用了每个专题编译成一个独立的exe窗体文件;
    2、各工程(专题)之间的跳转就靠Shell "rundll32.exe url.dll,FileProtocolHandler " & App.Path & "\专题名.exe", vbMaximizedFocus语句来完成。
    3、所有专题的主页用悬浮式窗体(始终置前),来调用,各专题窗体还有自身的菜单条,可以相互跳转。
    由于偶刚学VB6,所以用了上面的笨办法,目前试作了几个专题窗口,运行还算稳定(但不知还有何意外问题?),
    到目前为止,就发现只要是由悬浮窗体打开的窗体,在退出系统时就无法关闭,而由各专题窗体之间的跳转,在上面代码后加一个Unload Me就可以了。
    以上如有不妥之处,请指正,谢谢!
      

  7.   

    FindWindow
    SendMessage 
    这2个函数
    以及WM_CLOSE这个常量你定义了没有?去api浏览器里找