【问题标题】:Showing a messagebox on a form from another controller class在来自另一个控制器类的表单上显示消息框
【发布时间】:2014-09-20 22:30:55
【问题描述】:

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

欢迎提出任何建议 - 感谢您的帮助!

【问题讨论】:

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


    【解决方案1】:

    活动是你的新朋友!在各个班级中创建事件或创建一个在您的班级之间共享的新班级。我用它来来回交流并做我在数据类中不能做的事情。

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

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

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

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

    【讨论】:

    • 感谢您的帮助和快速响应!您能否提供一个如何执行此操作的示例,或者知道一个阅读更多相关信息的好地方?
    • @user2961759 添加示例
    猜你喜欢
    • 1970-01-01
    • 2015-05-03
    • 1970-01-01
    • 2010-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多