Überschriebener Sub triggert 2x

  • VB.NET

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von Nils_Kr.

    Überschriebener Sub triggert 2x

    Das ist besagter Sub:

    VB.NET-Quellcode

    1. Public Class AdvLineChart
    2. Inherits AdvancedChart
    3. Protected Overrides Sub Chart_MouseDown(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseDown
    4. Mainform.tempCLickCounter += 1
    5. Debug.WriteLine("line trigger: " & Mainform.tempCLickCounter)
    6. If canBeDrilled Then
    7. 'auszuführender Code
    8. End If
    9. End Sub


    Aus der abstrakten Oberklasse:

    VB.NET-Quellcode

    1. Public MustInherit Class AdvancedChart
    2. Protected Overridable Sub Chart_MouseDown(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseDown
    3. Mainform.tempCLickCounter += 1
    4. Debug.WriteLine("adv trigger: " & Mainform.tempCLickCounter)
    5. If canBeDrilled and Me.Series.Count = 1 Then
    6. 'auszuführender Code
    7. End If
    8. End Sub


    Wie man sieht wird der Sub einer abstrakten Oberklasse überschrieben. Wenn beide Subs den gleichen Handler haben, wird die Funktion 2x getriggert, aber immer nur der überschriebene Code ausgeführt. Ändere ich einen der beiden Handler auf Mouse.Click, wird die Funktion nur 1x getriggert.
    Ich habe das Verhalten jetzt damit umgangen, dass ich den ausgeführten Code in einen eigenen Sub ausgegliedert habe und nur diesen überschreibe und den Sub mit dem MouseDown-Handler unberührt lasse.

    Trotzdem würde ich gerne verstehen, wieso der überschreibende Sub im oben dargestellten Fall 2x getriggert wird.
    Option strict = on

    If it's stupid and it works it ain't stupid.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Nils_Kr“ ()

    Problem ist mMn das ​Handles Me.MouseDown da es im Prinzip zwei mal registriert wird. Einmal in der Basis- und einmal in der Subklasse.

    Ändere es einfach so ab, dass im Konstruktur der Basisklasse das Event per Addhandler registriert wird.

    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten
    Ich glaube die simpelste Variante ist den Handler in der Subklasse einfach wegzulassen.

    VB.NET-Quellcode

    1. Public Class AdvLineChart
    2. Inherits AdvancedChart
    3. Protected Overrides Sub Chart_MouseDown(sender As Object, e As System.Windows.Forms.MouseEventArgs)
    4. Mainform.tempCLickCounter += 1
    5. Debug.WriteLine("line trigger: " & Mainform.tempCLickCounter)
    6. If canBeDrilled Then
    7. 'auszuführender Code
    8. End If
    9. End Sub


    Damit wird der Sub nur 1x getriggert. Was ich aber nicht verstehe, wieso mit Mouse.Down + Mouse.Click nur einmal getriggert wird. Beide Ereignisse sind doch registriert und treten auf, wenn ich was anklicke.
    Option strict = on

    If it's stupid and it works it ain't stupid.