多个控件的事件处理程序 vb.net

Posted

技术标签:

【中文标题】多个控件的事件处理程序 vb.net【英文标题】:event handler for multiple controls vb.net 【发布时间】:2011-07-06 12:36:05 【问题描述】:

我正在尝试为表单上的某些控件捕获特定事件。我试过这个,但它没有触发事件

 For Each ctrl As Control In pnlGeneral.Controls
            If TypeOf ctrl Is CheckBox Then
                AddHandler (DirectCast(ctrl, CheckBox).CheckedChanged), AddressOf Control_Changed
            ElseIf TypeOf ctrl Is TextBox Then
                AddHandler (ctrl.TextChanged), AddressOf Control_Changed
            ElseIf TypeOf ctrl Is NumericUpDown Then
                AddHandler (DirectCast(ctrl, NumericUpDown).ValueChanged), AddressOf Control_Changed
            End If

        Next

谁能帮我解决这个问题?

编辑

我发现将控件放在多个控件中,窗体上是一个面板,面板内部是不同的组框,这些组框有控件试图捕获它们的事件

【问题讨论】:

你在哪里执行这段代码? 查看输出窗口。您是否看到“第一次机会例外”? 只是将代码放在 Shown 事件中。所有这些事件都具有相同的签名吗? 你的代码有效——我已经测试过了。 @LarsTech 你用控件 NumericUpDown、Checkbox 和文本框测试了吗 【参考方案1】:

正如拉斯所说,它似乎确实有效。

在适当位置进行编辑以考虑容器中的控件

Private Sub Form1_Shown(sender As Object, e As System.EventArgs) Handles Me.Shown
    Dim ctrl As Control = Me.GetNextControl(Me, True)
    Do Until ctrl Is Nothing
        If TypeOf ctrl Is CheckBox Then
            AddHandler (DirectCast(ctrl, CheckBox).CheckedChanged), AddressOf Control_Changed
        ElseIf TypeOf ctrl Is TextBox Then
            AddHandler (ctrl.TextChanged), AddressOf Control_Changed
        ElseIf TypeOf ctrl Is NumericUpDown Then
            AddHandler (DirectCast(ctrl, NumericUpDown).ValueChanged), AddressOf Control_Changed
        End If
        ctrl = Me.GetNextControl(ctrl, True)
    Loop
End Sub

Private Sub Control_Changed(sender As System.Object, e As System.EventArgs)
    Debug.WriteLine(sender.ToString)
End Sub

【讨论】:

【参考方案2】:
Private Sub Form_Activate(Byval sender As Object,Byval e as System.EventArgs) Handles Form.Activate

    Dim Ctrl as System.Windows.Forms.Control

    For Each Ctrl in Me.Controls
    If Typeof Ctrl Is System.Windows.Forms.TextBox then
    AddHandler Ctrl.GotFocus, AddressOf TextFocus
    AddHandler Ctrl.LostFocus, AddressOf TextUnfocus
    Next
End Sub

Private Sub TextFocus(ByVal sender As Object, ByVal e As System.EventArgs)
    CType(sender,System.Windows.Forms.TextBox).BackColor = Color.Blue
End Sub

Private Sub TextUnfocus(ByVal sender As Object, ByVal e As System.EventArgs)
    CType(sender, System.Windows.Forms.TextBox).BackColor = Color.White
End Sub

【讨论】:

以上是关于多个控件的事件处理程序 vb.net的主要内容,如果未能解决你的问题,请参考以下文章

vb.net 方向键不能触发 keydown 事件

java中的事件处理,对于vb.net专家

处理 WPF 用户控件的事件

如何在 IconButton VB .NET WinForm 中处理 MouseHover 和 MouseLeave 事件

VB.NET WebBrowser 控件 OnClick 事件未触发

向任何控件添加事件处理程序会导致 Visual Studio 中的错误