在另一个控制器类的表单上显示消息框

时间:2014-07-29 13:58:54

标签: vb.net winforms user-interface model-view-controller controller

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

任何建议都值得赞赏 - 感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

活动是你的新朋友!在各个类中创建事件或创建在类之间共享的新类。我使用它来回传递和做我在数据类中无法做的事情。

基本上,在此共享类中创建共享事件。然后在加载应用程序时,为事件添加处理程序。然后,您可以随时从您的"控制器"类。

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

Public Shared Event SendMsg(ByVal sMsg As String)

我还在同一个类中创建了一个方法来调用事件:

Public Shared Sub SendMessage(ByVal sMessage As String)
    RaiseEvent SendMsg(sMessage)
End Sub

然后在您的UI应用程序中,在初始化期间的某个地方,您需要为事件添加处理程序:

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")

我使用相同的技术来获取数据或我需要的任何其他内容。