嗨,伙计们,当我想让屏幕启动一次然后转到主屏幕时,我被困在我的程序的一部分是我的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
结束班
我还将字符串变量放在表单属性的设置中 但是每当我第一次尝试运行它时,我总会得到两个表单,如何在用户第一次点击按钮后才能显示第二个表单?
由于
答案 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