0

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

结束类

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

谢谢

4

1 回答 1

1

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

这就是怪癖发挥作用的地方,Load 事件被触发,因为 Visible 被设置为 True。在 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
于 2012-10-07T13:23:53.587 回答