领导今天问我这样一个问题,在程序中,他想自己定义一个消息,然后由一个窗体激活另外一个窗体进行数据处理。目的是为了减少偶合。
问题1:程序应该怎么写。请给个例子,比如form1发出消息,form2截获这个消息后显示出来,并弹出msgbox“hello!”,或者有更好的方式。谢谢!
问题2:他这种想法对吗?有什么更好解决方法

解决方案 »

  1.   

    你看一下MSDN里的RaiseEvent的帮助,结合VBControlExtender应该就可以拉
    在接收消息的form 里加入
    Dim WithEvents x As VBControlExtender
    和他的时间处理过程
    Private Sub x_ObjectEvent(Info As EventInfo)
    然后再你的触发的form 里加入
    Public Event RaiseVBInfo(ByVal sStr As String)
    然后在需要触发的地方加入
    RaiseEvent RaiseVBInfo("Trigger")
    如果需要参数的话,加入参数,不需要的话就删掉。
    详细的看MSDN吧:)
      

  2.   

    Private Sub x_ObjectEvent(Info As EventInfo)
         msgbox“hello!”
    end sub
      

  3.   

    楼上你好,你的留言我看了。以下是我的代码,可是没有反应,帮忙再看看,十二万分感谢
    触发窗体
    Public Event RaiseVBInfo(ByVal sStr As String)Private Sub Command1_Click()
        Form2.Show
        RaiseEvent ObjectEvent("")
    End Sub
    接收窗体
    Dim WithEvents x As VBControlExtenderPrivate Sub x_ObjectEvent(Info As EventInfo)
        MsgBox "hello!"
    End Sub
      

  4.   

    '''''
     ' 设置新的窗口信息处理进程             '窗口进程        '窗口进程地址
        OldWindowProc = SetWindowLong(frm.hwnd, GWL_WNDPROC, AddressOf NewWindowProc)
      
        ' 恢复原来窗口信息处理进程.
        SetWindowLong TheForm.hwnd, GWL_WNDPROC, OldWindowProc'''''' *********************************************
    ' 新的窗口进程
    ' *********************************************
    Public Function NewWindowProc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
        
        If Msg = My_Message Then   'My_Message 你定义的消息
              msgbox "消息收到"
        End If
        
        '发送其余的消息到原先的窗口信息处理进程
        NewWindowProc = CallWindowProc(OldWindowProc, hwnd, Msg, wParam, lParam)
    End Function