在程序中发送  PostMessage hWndParent, WM_CLOSE, 0&, 0&
 hWndParent另一个运行程序中的窗体句柄,窗口被关闭了,但不会触发 form_unload事件 附上Private Sub Form_Unload(Cancel As Integer)
    unload_sub
End Sub
Sub unload_sub()
    Open "dw411.dat" For Output As #1
    Print #1, Form1.Option1.Value, Form1.Option2.Value, Form1.Check1.Value, Form1.Check2.Value, Form1.Text1.FontName, Form1.Text1.FontUnderline, Form1.Text1.FontItalic
    Close #1
End Sub给点指导,我想在程序中发送消息关闭另一个运行中窗体,从而触发运行窗体中的Form_unload事件,输出其中相关控件的信息,谢谢

解决方案 »

  1.   

    Private Sub Form_Terminate(Cancel As Integer)
        unload_sub
    End Sub
    Sub unload_sub()
        Open "dw411.dat" For Output As #1
        Print #1, Form1.Option1.Value, Form1.Option2.Value, Form1.Check1.Value, Form1.Check2.Value, Form1.Text1.FontName, Form1.Text1.FontUnderline, Form1.Text1.FontItalic
        Close #1
    End Sub试试
      

  2.   

    方法不对,窗体已经被卸载了,unload_sub还未被执行。
    应该这样才对:
     
    Sub unload_sub()
        Open "dw411.dat" For Output As #1
        Print #1, Form1.Option1.Value, Form1.Option2.Value, Form1.Check1.Value, Form1.Check2.Value, Form1.Text1.FontName, Form1.Text1.FontUnderline, Form1.Text1.FontItalic
        Close #1
    End SubPrivate Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
        Cancel = 1'禁止卸载窗体
        unload_sub
        Cancel = 0'允许卸载窗体
    End Sub
      

  3.   

    你把Form_unload方法换成form_Queryunload方法吗 还是直接添加form_Queryunload方法?
    我是用Form_unload方法换成form_Queryunload方法,还是没有输出文件
      

  4.   

    你确定是要发送消息的窗体的句柄吧?
    我测试了正确的。就简单一句代码:Private Sub Form_Unload(Cancel As Integer)
        msgbox "quit"
    End Sub
      

  5.   

    确定是那个窗体 Private Sub Form_Unload(Cancel As Integer)
      MsgBox "w025"
        unload_sub
    End Sub
    Sub unload_sub()
        Open "w025.dat" For Output As #1
        Print #1, Form1.Option1.Value, Form1.Option2.Value, Form1.Check1.Value, Form1.Check2.Value, Form1.Text1.FontName, Form1.Text1.FontUnderline, Form1.Text1.FontItalic
        Close #1
    End Sub
    在结束的时候会弹出忘w025这个警告框
      

  6.   

    Option ExplicitDim OutputEnd As BooleanSub unload_sub()
        Open "c:\2.bmp" For Output As #1
        'Print #1, Form1.Option1.Value, Form1.Option2.Value, Form1.Check1.Value, Form1.Check2.Value, Form1.Text1.FontName, Form1.Text1.FontUnderline, Form1.Text1.FontItalic
        Close #1
        OutputEnd = True
        MsgBox ("输出完毕!")
    End SubPrivate Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
        Cancel = 1 '禁止卸载窗体
        unload_sub
        If OutputEnd Then Cancel = 0 '允许卸载窗体
    End SubPrivate Sub Form_Load()
        OutputEnd = False
    End Sub
      

  7.   

    那你一开始说“但不会触发 form_unload事件”就是错误的。应该是写入文件了只是你没找到文件在哪里,默认的在exe文件旁边,如果没保存工程那么在vb的安装路径里。
      

  8.   

    那怎么让输出文件放到运行文件窗体的文件夹中Private Sub Form_Unload(Cancel As Integer)
      MsgBox "w025"
        unload_sub
    End Sub
    Sub unload_sub()
        Open apppath & "\" & "w025.dat" For Output As #1
        Print #1, Form1.Option1.Value, Form1.Option2.Value, Form1.Check1.Value, Form1.Check2.Value, Form1.Text1.FontName, Form1.Text1.FontUnderline, Form1.Text1.FontItalic
        Close #1
    End Subapppath要怎么写啊? 
    又一次低级错误 ,自己太马虎了 不好意思
      

  9.   

    app和path之间有个.的
    app.path
      

  10.   

    你看就因为你的“但不会触发 form_unload事件”观点,本来一个Form_Unload就可以搞定的,结果让大家绕了那么多弯子把Form_Terminate、Form_QueryUnload什么的都搬出来了。造成了国家社会以及csdn服务器资源的浪费。
    另外此贴有内急贴嫌疑:
    http://topic.csdn.net/u/20110304/10/7e6fde94-865d-4eb8-af0d-5adc47b2c961.html
      

  11.   

    你的问题是这样的:应该等待unload_sub过程代码执行完毕后,再运行下面的程序。而程序是异步执行的,unload_sub还未执行完毕,就已经执行到下面语句了。
      

  12.   

    你的问题真正答案在8楼,应该把分集中在8楼,而不是散分似地,这样以后的人找答案直接找分最多的楼就行了。10楼那种true false绕来绕去的根本就不是问题的答案,会对以后的人造成误导。
      

  13.   

    这个不是顺序执行下去的,不是异步的。要是异步的你还得用下面的代码才行:
    do while not OutputEnd :doevents
    loop
    Cancel = 0 '允许卸载窗体