首页 > 解决方案 > 如何在 VB.Net(Windows 窗体)应用程序中实现 MVC 类型(全局)控制器?

问题描述

我习惯于以 MVC 风格创建 (Excel) VBA 用户表单程序,并且最近一直在研究 VB.Net。

一般来说,我会在 VBA 中创建一个 MVC 样式的用户表单应用程序,方法是创建一个“初始化”函数,该函数创建一个“控制器”模块的实例并利用该控制器中包含的“启动程序”方法。此方法将创建应用程序使用的模型和视图的实例,然后将视图呈现给用户。

例如,

Public Sub Launch()
    With New Controller
        .Present
    End With
    Debug.Print "Execution ended"
End Sub

然后在控制器(类)模块中,我会有如下代码

Private WithEvents m_View As View
Private m_Model As Model

Public Sub Present()
    Set m_View = New View
    Set m_Model = New Model
    m_View.Show vbModal
End Sub

我对 VB.Net 的问题是没有明显的方法来创建一个等效的“启动器”子程序,它控制程序的执行,而只是在运行程序时向用户显示主窗体的默认实例. 我试图通过创建一个主窗体来复制所需的架构,该主窗体(应该是)在启动程序时立即隐藏。这个隐藏的表单(应该)然后创建所有其他表单的特定实例,控制如何根据一般 MVC 方法处理和返回用户输入。

但是,这不起作用,因为 VB.Net 代码......

Public mSetupForm As SetupForm
Public mOutputForm As OutputForm

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Debug.Print("Program initialized")
    mSetupForm = New SetupForm
    mOutputForm = New OutputForm
    Me.Hide()
    mSetupForm.Show()
End Sub

...不隐藏 Form1。

标签: vb.netmodel-view-controller

解决方案


默认情况下,VB.NET 应用程序使用神秘的Windows 应用程序框架,这意味着构建过程会为您添加一个入口点,该入口点会自动运行您用作主窗体的任何窗体。您可以通过Project Properties > Application > Windows application framework properties访问这些设置。

如果您不想使用该框架,请取消选中启用应用程序框架复选框,然后选择您要使用Sub Main作为您的Startup 对象。然后,您可以创建一个带有Public Sub Main方法的模块,该方法将成为应用程序的入口点。

总的来说,如果你想显示一个表单,只需调用Application.Run并传递你想要显示的表单的实例(如果你愿意,你可以连续多次调用它)。


推荐阅读