Visual basic. Change default startup form in code, depending on value of variable

不想你离开。 提交于 2021-02-05 08:17:26

问题


I have been working on a Visual Basic project in Visual Studio and have encountered a problem.

I understand that the Startup form property in the Application page of the Project Designer can be changed to a default form, however what I require is a way to do this through code in ApplicationEvents.vb depending on the value of a variable within application settings.

The goal is that if a user completes a form then a value is assigned to a variable, e.g. variable username = "xxx". If this value is true, then the default startup is a login form (as the user has already registered), and if it is false then the user is taken to a register form.

I appreciate that I could use another form to determine this, however this seems like I would be squandering the capabilities of ApplicationEvents and not using it correctly (I also want to avoid the inevitable flicker of a blank form as it decides).

I know that the default form is stored in Application.myapp, however with the final publication of the .exe this file will (presumably) not be exported with it, so I want to avoid writing directly to it. I have also read into the windowsformsapplicationbase.mainform property, however cannot figure out how to use it?

Here is a example piece of code from ApplicationEvents.vb to demonstrate my question.

 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

回答1:


Usually, if you need that much control over what happens at start-up, you just want to disable the a application framework. To do so, just un-check the Enable application framework check-box in the Application tab of the My Project settings designer window. Once you un-check that, you will be able to change the Startup object to Sub Main. Then you can add a new module with a Main method, like this:

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

Be aware, however--by disabling the application framework, you will loose the other automatic functionality that it provides, such as ApplicationEvents. If you want to use the application framework, you can accomplish the same thing by simply setting the MyApplication.MainForm property in the MyApplication.Startup event:

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

Alternatively, you could always show the same form, but then have the form contain nothing but a single UserControl. Then you can simply switch which UserControl is displayed depending upon the settings. The user-controls would need to include all of the controls that would have otherwise been placed on the two different forms.



来源:https://stackoverflow.com/questions/31707205/visual-basic-change-default-startup-form-in-code-depending-on-value-of-variabl

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!