视觉基础.根据变量的值更改代码中的默认启动表单

Aus*_*xis 1 vb.net forms visual-studio-2013

我一直在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
Run Code Online (Sandbox Code Playgroud)

Ste*_*art 6

通常,如果您需要对启动时发生的事情进行大量控制,您只需要禁用应用程序框架.为此,只需取消选中My Project设置设计器窗口的Application选项卡中的Enable application framework复选框.取消选中后,您将能够将Startup对象更改为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
Run Code Online (Sandbox Code Playgroud)

但请注意,通过禁用应用程序框架,您将失去其提供的其他自动功能,例如ApplicationEvents.如果要使用应用程序框架,只需MyApplication.MainFormMyApplication.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
Run Code Online (Sandbox Code Playgroud)

或者,您可以始终显示相同的表单,但随后表单只包含一个表单UserControl.然后您可以UserControl根据设置简单地切换显示的内容.用户控件需要包含原本放在两个不同表单上的所有控件.