Visual Basic:表单记住设置

时间:2012-10-06 17:59:57

标签: winforms visual-studio-2012 remember-me

嗨,伙计们,当我想让屏幕启动一次然后转到主屏幕时,我被困在我的程序的一部分是我的Form 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

结束班

我还将字符串变量放在表单属性的设置中 但是每当我第一次尝试运行它时,我总会得到两个表单,如何在用户第一次点击按钮后才能显示第二个表单?

由于

1 个答案:

答案 0 :(得分:1)

这是一个Winforms的怪癖。 Form.Hide()方法将Visible属性设置为False。 Visible属性在Winforms中是一个非常重要的交易。在典型的.NET样式中,表单的本机窗口以尽可能晚的延迟方式创建。正是Visible属性让车子滚动,设置它会触发一大串代码。包括为表单创建本机窗口,以及所有控件的本机窗口,根据需要进行任何自动缩放。并且会触发Load事件。

这就是怪癖发挥作用的地方,因为Visible被设置为True,所以会触发Load事件。在Load事件处理程序中将其设置为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