我一直在使用Visual Studio中的Visual Basic项目,但遇到了问题。
我理解Project Designer的Application页面中的Startup表单属性可以更改为默认表单,但我需要的是通过ApplicationEvents.vb中的代码执行此操作,具体取决于变量的值应用程序设置。
目标是如果用户完成表单,则将值分配给变量,例如,变量username =“xxx”。如果此值为true,则默认启动是登录表单(因为用户已经注册),如果为false,则用户将转到注册表单。
我很欣赏我可以使用另一种形式来确定这一点,但是这似乎是浪费了ApplicationEvents的功能而没有正确使用它(我也希望避免因为它决定的空白表单不可避免的闪烁)。
我知道默认表单存储在Application.myapp中,但是对于.exe的最终发布,这个文件(可能)不会随之导出,所以我想避免直接写入它。我也读过windowsformsapplicationbase.mainform属性,但是无法弄清楚如何使用它?
以下是ApplicationEvents.vb中的一段示例代码,用于演示我的问题。
If String.IsNullOrEmpty(My.Settings.username) Then
MsgBox("You have not registered")
'set register as default form
Else
MsgBox("You have registered")
'set login as default form
End If
答案 0 :(得分:6)
通常,如果您需要对启动时发生的事情进行大量控制,您只需要禁用应用程序框架。为此,只需取消选中我的项目设置设计器窗口的应用标签中的启用应用框架复选框。取消选中后,您就可以将启动对象更改为 Sub Main 。然后,您可以使用Main
方法添加新模块,如下所示:
Module Module1
Public Sub Main()
Application.EnableVisualStyles()
If String.IsNullOrEmpty(My.Settings.username) Then
Application.Run(New RegisterForm())
Else
Application.Run(New LoginForm())
End If
End Sub
End Module
但请注意,通过禁用应用程序框架,您将失去其提供的其他自动功能,例如ApplicationEvents
。如果您想使用应用程序框架,只需在MyApplication.MainForm
事件中设置MyApplication.Startup
属性即可完成相同的操作:
Partial Friend Class MyApplication
Private Sub MyApplication_Startup(sender As Object, e As ApplicationServices.StartupEventArgs) Handles Me.Startup
If String.IsNullOrEmpty(My.Settings.username) Then
Me.MainForm = New RegisterForm()
Else
Me.MainForm = New LoginForm()
End If
End Sub
End Class
或者,您可以始终显示相同的表单,但之后表单只包含一个UserControl
。然后,您可以根据设置简单地切换显示UserControl
。用户控件需要包含原本放在两种不同表单上的所有控件。