Vb.net 从另一个控制器类在窗体上显示messagebox

Vb.net 从另一个控制器类在窗体上显示messagebox,vb.net,winforms,user-interface,model-view-controller,controller,Vb.net,Winforms,User Interface,Model View Controller,Controller,我在windows窗体应用程序中使用MVC结构,其中窗体的所有业务逻辑都在单独的控制器类中计算。我面临的挑战之一是,在控制器逻辑的某些情况下,需要在表单上向用户显示Messagebox。我一直试图通过创建一个新的异常来实现这一点,该异常将在包含要在messagebox中显示的消息的表单上处理,但我最近发现这可能还不够;我还需要“是/否”消息框,以及带有不同图标的消息框。我认为我的自定义异常无法在其中打包此类信息。有人告诉我,如果改用委托或事件类型结构,可能会取得一些成功,但我不确定这将如何实现

我在windows窗体应用程序中使用MVC结构,其中窗体的所有业务逻辑都在单独的控制器类中计算。我面临的挑战之一是,在控制器逻辑的某些情况下,需要在表单上向用户显示Messagebox。我一直试图通过创建一个新的异常来实现这一点,该异常将在包含要在messagebox中显示的消息的表单上处理,但我最近发现这可能还不够;我还需要“是/否”消息框,以及带有不同图标的消息框。我认为我的自定义异常无法在其中打包此类信息。有人告诉我,如果改用委托或事件类型结构,可能会取得一些成功,但我不确定这将如何实现


欢迎您的建议,谢谢您的帮助

活动是你的新朋友!在单个类中创建事件,或者创建在类之间共享的新类。我用它来来回通信,做我在数据类中做不到的事情

基本上,在这个共享类中创建一个共享事件。然后在加载应用程序时,为事件添加一个处理程序。然后,您可以随时从“控制器”类调用事件

例如,在其他库中的共享类中:

Public Shared Event SendMsg(ByVal sMsg As String)
我还在同一个类中创建了一个用于调用事件的方法:

Public Shared Sub SendMessage(ByVal sMessage As String)
    RaiseEvent SendMsg(sMessage)
End Sub
AddHandler _ClsPM.SendMsg, AddressOf ShowMessage
然后,在UI应用程序上,在初始化过程中的某个地方,您需要为事件添加一个处理程序:

Public Shared Sub SendMessage(ByVal sMessage As String)
    RaiseEvent SendMsg(sMessage)
End Sub
AddHandler _ClsPM.SendMsg, AddressOf ShowMessage
它指向在引发事件时执行工作的方法:

Public Sub ShowMessage(ByVal sString As String)
   Try
      MsgBox(sString, MessageBoxButtons.OK, MessageBoxIcon.Error)
   Catch ex As Exception
      ErrorHandler(ex)
   End Try
End Sub
因此,现在,在库中的任何位置,或引用该库的任何内容,您都可以调用:

[Name of your shared library].SendMessage("Hello World")

我使用同样的技术获取数据或任何我需要的东西。

感谢您的帮助和快速响应!你能提供一个例子来说明如何做,或者知道一个好的地方来阅读更多关于它的信息吗?@user2961759添加了一个例子