Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于多控件的事件处理程序vb.net_.net_Vb.net_Winforms_Event Handling - Fatal编程技术网

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

用于多控件的事件处理程序vb.net,.net,vb.net,winforms,event-handling,.net,Vb.net,Winforms,Event Handling,我正在尝试捕获窗体上某些控件的特定事件。我试过这个,但它并没有引发事件 For Each ctrl As Control In pnlGeneral.Controls If TypeOf ctrl Is CheckBox Then AddHandler (DirectCast(ctrl, CheckBox).CheckedChanged), AddressOf Control_Changed ElseIf Type

我正在尝试捕获窗体上某些控件的特定事件。我试过这个,但它并没有引发事件

 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
谁能帮我修理一下吗

编辑


我发现我将控件放在多个控件中,窗体上是一个面板,面板内是不同的groupbox,这些groupbox中的控件试图捕获它们的事件,正如Lars所说的那样,它确实起作用了

就地编辑以说明容器中的控件


正如拉尔斯所说,这似乎确实有效

就地编辑以说明容器中的控件


在哪里执行此代码?查看输出窗口。您是否看到第一次出现异常?请将该代码放在显示的事件中。所有这些事件是否都有相同的签名?您的代码运行正常-我已经测试过了。@LarsTech您是否使用控件NumericUpDown、复选框和文本框进行了测试?您在哪里执行此代码?请查看输出窗口。您是否看到第一次出现异常?请将该代码放在显示的事件中。所有这些事件都有相同的签名吗?您的代码运行正常-我已经测试过了。@LarsTech您是否使用控件NumericUpDown、复选框和文本框进行了测试
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
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