我在我的Windows窗体应用程序中使用MVC结构,其中表单的所有业务逻辑都在一个单独的控制器类中计算。我面临的挑战之一是,在控制器逻辑的某些情况下,需要在表单上向用户显示消息框。我一直试图通过创建一个新的例外来实现这一目标,该例外将在包含要在消息框中显示的消息的表单上处理,但我最近发现这可能不会成功。足够;我还需要YES / NO消息框和带有不同图标的消息框。我不认为我的自定义异常可以在其中包含这种信息。我被告知如果我改为使用委托或事件类型结构,我可能会看到一些成功,但我不确定如何实现这一点。
任何建议都值得赞赏 - 感谢您的帮助!
答案 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")
我使用相同的技术来获取数据或我需要的任何其他内容。