用于多控件的事件处理程序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