Winforms Visual Basic:表单记忆设置

Winforms Visual Basic:表单记忆设置,winforms,visual-studio-2012,remember-me,Winforms,Visual Studio 2012,Remember Me,嗨,伙计们,当我只想启动一次屏幕时,我被程序的一部分卡住了,然后转到主屏幕这里是我表格1的代码 Public Class Form1 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click My.Settings.Done = "Finished" My.Settings.Save() Me.Hide() Form2.Show() End Sub Pri

嗨,伙计们,当我只想启动一次屏幕时,我被程序的一部分卡住了,然后转到主屏幕这里是我表格1的代码

Public Class Form1

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    My.Settings.Done = "Finished"
    My.Settings.Save()
    Me.Hide()
    Form2.Show()
End Sub

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    If My.Settings.Done = "Finished" Then
        Me.Hide()
        Form2.Show()
    Else

    End If
End Sub
末级

我还将字符串变量放入表单属性的设置中 但是每次我试着在第一次之后运行它时,我总是会得到两个表单。如何让它仅在用户第一次单击按钮后显示第二个表单


谢谢

这是Winforms的一个怪癖。方法将Visible属性设置为False。Visible属性在Winforms中非常重要。在典型的.NET风格中,表单的本机窗口以惰性方式创建,越晚越好。这是一个可见属性,它使马车滚动,将其设置为真会触发一个大的代码链。包括为窗体创建本机窗口,以及为所有控件创建本机窗口,以及根据需要进行任何自动缩放。并触发加载事件

这就是怪癖发挥作用的地方,加载事件被触发,因为Visible被设置为True。在加载事件处理程序中将其设置为False没有任何效果,这将“撤消”首先触发它的原因。当这样解释的时候有点道理,当然当你遇到这种行为的时候就没有什么意义了

即使代码确实有效,也会导致更多问题。你仍然有一个隐藏的形式。即使当用户关闭唯一可见的窗口时,它也会保持程序运行。那不好

一个有效的方法是关闭表单。您需要更改设置。项目+属性,应用程序选项卡。将关闭模式选项更改为“当最后一个窗体关闭时”。现在你可以这样写:

Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
    If My.Settings.Done = "Finished" Then
        Form2.Show()
        Me.Close()
    End If
End Sub
但是更干净的解决方案是只选择正确的第一个表单来显示。项目+属性,应用程序选项卡,单击“查看应用程序事件”按钮。添加启动事件:

    Private Sub MyApplication_Startup(ByVal sender As Object, ByVal e As Microsoft.VisualBasic.ApplicationServices.StartupEventArgs) Handles Me.Startup
        If My.Settings.Done = "Finished" Then Me.MainForm = New Form2()
    End Sub