манипулатор на събития за множество контроли vb.net

AM се опитва да прихване конкретни събития за някои контроли във формуляр. Опитах това, но не задейства събитията

 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

Може ли някой да ми помогне с поправката?

РЕДАКТИРАНЕ

Разбрах, че поставям контролата в множество контроли, във формуляра има панел, вътре в панела е различна групова кутия, тези групови кутии имат контролите, опитвам се да уловя техните събития


person Smith    schedule 06.07.2011    source източник
comment
Къде изпълнявате този код?   -  person Daniel Hilgarth    schedule 06.07.2011
comment
Погледнете в прозореца за изход. Виждате ли изключение при първа възможност?   -  person Hans Passant    schedule 06.07.2011
comment
Просто за дяволите поставете този код в събитието Shown. Всички тези събития имат ли един и същ подпис?   -  person dbasnett    schedule 06.07.2011
comment
Вашият код работи - тествах го.   -  person LarsTech    schedule 06.07.2011
comment
@LarsTech тества ли с контролите NumericUpDown, Checkbox и textbox   -  person Smith    schedule 06.07.2011
comment
@dbasnett има ли някаква разлика между поставянето му в събитието Form_load и show?   -  person Smith    schedule 06.07.2011
comment
@Smith Създадох панел, наречен pnlGeneral, поставих CheckBox, NumericUpDown и TextBox върху него, копирах вашия код в събитието Form_Load, добавих ListBox отстрани и след това в процедурата Control_Changed, току-що направих ListBox1.Items.Add (sender.ToString) и се задейства при всички тези събития за промяна.   -  person LarsTech    schedule 06.07.2011
comment
@Smith Вижте актуализация на оригиналната ми публикация.   -  person dbasnett    schedule 06.07.2011
comment
@dbasnett върши и това работа Me.GetNextControl(Me, True), не знаех, не го пробвах, защото мислех, че това е моят отговор, който сте копирали bac, тогава ще го маркирам като отговор   -  person Smith    schedule 06.07.2011
comment
Ако сте го пробвали и работи, значи работи. Не, не съм копирал кода ви.   -  person dbasnett    schedule 06.07.2011


Отговори (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
person dbasnett    schedule 06.07.2011