RemoveHandler mit Hilfe einer Schleife

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von SpaceyX.

    RemoveHandler mit Hilfe einer Schleife

    Guten Tag zusammen,

    gerade stehe ich irgendwie auf dem Schlauch. Ich habe eine Form mit einer Groupbox, die wiederum viele ComboBoxen enthält. Ich möchte gerne mit einer Schleife über alle ComboBoxen laufen und dabei die EventHandler der einzelnen ComboBoxen entfernen. Dazu habe ich folgenden Code geschrieben:

    VB.NET-Quellcode

    1. Imports System.Reflection...
    2. Public Sub EntferneComboBoxHandler() Dim cBox = New ComboBox Dim cName As String = "" Dim strName As String = "" For Each c As Control In Me.ArtikelbeschreibungGroupBox.Controls If TypeOf c Is ComboBox Then cName = c.Name strName = [Assembly].GetEntryAssembly.GetName.Name & "." & Me.GetType().Name & ".ArtikelbeschreibungGroupBox." & cName cBox = DirectCast([Assembly].GetEntryAssembly.CreateInstance(strName), System.Windows.Forms.ComboBox) RemoveHandler cBox.SelectedIndexChanged, AddressOf LeitartikelComboBox_SelectedIndexChanged
    3. End If
    4. Next
    5. For Each c As Control In Me.Artikelbeschreibung2GroupBox.Controls If TypeOf c Is ComboBox Then cName = c.Name strName = [Assembly].GetEntryAssembly.GetName.Name & "." & Me.GetType().Name & ".Artikelbeschreibung2GroupBox." & cName cBox = DirectCast([Assembly].GetEntryAssembly.CreateInstance(strName), System.Windows.Forms.ComboBox) RemoveHandler cBox.SelectedIndexChanged, AddressOf LeitartikelComboBox_SelectedIndexChanged
    6. End If
    7. Next
    8. End Sub



    Das Problem ist, das cBox immer Nothing ist. Was genau mache ich falsch? Tausend Dank im Voraus für Eure Hilfe!

    Lieben Gruß
    Marcus

    mjanz schrieb:

    Dazu habe ich folgenden Code geschrieben:
    Kannst Du diesen Code bitte so formatieren (Button Bearbeiten), dass er so aussieht, wie in Deinem Studio?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Morgen @mjanz:
    So würde ich das machen, aber den Handler zu entfernen erscheint mir als Wahl des falschen Weges.
    Was hast du denn vor?
    Im Zweifel einfach eine Boolean-Variable einführen, die angibt ob das was im Handler drinsteht ausgelöst werden soll oder eben nicht.

    VB.NET-Quellcode

    1. Public Sub SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged, ComboBox2.SelectedIndexChanged, ComboBox3.SelectedIndexChanged, ComboBox4.SelectedIndexChanged
    2. MessageBox.Show("Handler is active!")
    3. End Sub
    4. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    5. For Each cb As Control In Me.GroupBox1.Controls()
    6. If TypeOf cb Is ComboBox Then
    7. Dim c = DirectCast(cb, ComboBox)
    8. RemoveHandler (c.SelectedIndexChanged), (AddressOf Me.SelectedIndexChanged)
    9. End If
    10. Next
    11. End Sub


    Außerdem bitte deinen Code formatieren, denn so ist er nicht lesbar. [01 Forum] Bitte VB-Tag(s) benutzen - was ist damit gemeint? Oder: Wie füge ich Quellcode korrekt im Forum ein?
    Da war der gute @RodFromGermany: schneller :D

    LaMiy schrieb:

    So würde ich das machen, aber den Handler zu entfernen erscheint mir als Wahl des falschen Weges.
    Im Zweifel einfach eine Boolean-Variable einführen
    Seh ich anners.
    Ich finds logisch, den Handler hinzumachen, wenn das Event behandelt werden soll, und wegzumachen, wenns nicht behandelt werden soll.
    Unschön fände ich, für diesen Zweck eine zusätzliche Klassen-Variable (den bool) einführen zu müssen.

    Aber ist auch Geschmacksache, also mit sonem bool kannich auch leben, nur zu sagen RemoveHandler sei der falsche Weg, da widerspreche ich.
    Wenn es um so eine spezielle Sache geht (Control soll mal Event auslösen, mal nicht), dann bietet es sich an, eine Ableitung dieses Controls zu erstellen. Hier könnte man eine Property einführen, die, je nach Zustand, ein Event auslöst oder nicht. Hier müsste man nur noch die zugehörige Methode überschreiben, die in der Basisklasse das Event auslöst.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o