Vb.net 为什么在窗体显示事件之前触发Windows窗体控件单击事件?
我有一个表单可以实例化并打开另一个表单。直到最近,它还工作得很好,在重新设计第二个表单时,表单上单选按钮上的单击事件在表单加载后开始被触发。我在form.Showed事件中有代码,但它从未被调用(该表单在单选按钮单击事件期间崩溃,因为它不应该这么快被调用)。调用堆栈窗口表明PictureBox click事件也在RadioButton click事件之前或之后触发 表单加载:Vb.net 为什么在窗体显示事件之前触发Windows窗体控件单击事件?,vb.net,winforms,Vb.net,Winforms,我有一个表单可以实例化并打开另一个表单。直到最近,它还工作得很好,在重新设计第二个表单时,表单上单选按钮上的单击事件在表单加载后开始被触发。我在form.Showed事件中有代码,但它从未被调用(该表单在单选按钮单击事件期间崩溃,因为它不应该这么快被调用)。调用堆栈窗口表明PictureBox click事件也在RadioButton click事件之前或之后触发 表单加载: Private Sub Form1_Load(sender As Object, e As EventArgs) Ha
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
lblCountdown.TextAlign = ContentAlignment.TopCenter
lblCountdown.Font = New Font(lblCountdown.Font.Name, lblCountdown.Font.Size + 10, lblCountdown.Font.Style)
radFirstRunContinue.Checked = False
radFirstRunContinue.Visible = False
For Each picBox As PictureBox In tlpButtonTableLayout.Controls
AddHandler picBox.Click, AddressOf Me.PictureBox_click
Next
End Sub
有时,表单初始化时会触发表单控件。这听起来可能像一个bug,但微软称之为“设计”
我没有足够的代表发布调用堆栈窗口的图像。嗯,这很奇怪。我从来没有听说过。如果我不再次更改表单,这些事件是随机的还是总是会触发?我不确定。它们似乎一直在发射,直到在中使用一个标志来阻止处理程序执行,然后我就忘了它。但这似乎是随机的,从一个项目到另一个项目。另一个解决方案是在表单初始化后分配事件处理程序,但我认为这在将来的维护中会有点混乱。@TravelinMax-对于xpda的第1点,您永远不应该使用默认表单实例。使用表单时,应始终执行以下操作:
Dim frm As New Form1。。。frm.Show()等
如果您发现自己只是在Show
或ShowDialog
中使用表单类的名称,那么您使用的是默认表单实例,应该避免使用。出于兼容性的目的,它们是VB6的遗留版本。@ChrisDunaway Yes my form1是默认表单(打开程序时加载的表单),它实例化了一个新表单2,然后显示它。