vb.net - 如何在 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.NET 应用程序使用神秘的Windows 应用程序框架,这意味着构建过程会为您添加一个入口点,该入口点会自动运行您用作主窗体的任何窗体。您可以通过Project Properties > Application > Windows application framework properties访问这些设置。
如果您不想使用该框架,请取消选中启用应用程序框架复选框,然后选择您要使用Sub Main作为您的Startup 对象。然后,您可以创建一个带有Public Sub Main
方法的模块,该方法将成为应用程序的入口点。
总的来说,如果你想显示一个表单,只需调用Application.Run
并传递你想要显示的表单的实例(如果你愿意,你可以连续多次调用它)。
推荐阅读
- docker - 为什么客户端无法连接到 localhost:8080?
- javascript - 在画布上显示 node.js 输出变量
- python - 使用 OpenCV 保存视频时出现错误消息
- ios - 它不允许我通过“App Store Connect Operation Error”上传应用程序
- vue.js - 将吸气剂导入路由器的问题 - Vuex
- javascript - 在 React/TS 上调整窗口大小、居中并保持纵横比时调整图像大小
- r - 将字符向量转换为具有级别的因子
- tensorflow2.0 - 功能 API 测试失败
- c# - 如何安全存储google drive api提供的每个用户的OAuth响应文件
- docker - Centos iptables 因 docker 规则而失败