为什么Windows窗体控件单击事件在窗体显示事件之前被触发?

时间:2015-02-17 01:13:22

标签: vb.net winforms

我有一个实例化并打开另一个表单的表单。直到最近才工作正常,同时重新设计第二种形式,表单上的单选按钮上的单击事件已在表单加载后开始触发。我在form.shown事件中有代码,但它永远不会被调用(窗体在单选按钮单击事件期间崩溃,因为它不应该这么快被调用)。调用堆栈窗口表明在RadioButton点击事件之前或之后也正在触发PictureBox点击事件。

表单加载:

 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

1 个答案:

答案 0 :(得分:1)

有时,表单控件将在表单初始化时触发。这可能听起来像一个bug,但微软称之为“按设计”。

  1. 检查并确保只加载表单的一个实例。如果从外部访问表单中的变量或控件,它将启动隐式表单加载。要检查这一点,只需在Load事件处理程序的开头设置一个断点。

  2. 您可以使用控件处理程序可以用来查看正在加载表单的标志(例如,初始化为true)。您可以在显示的事件中重置标记。