Ist es nötig den Handler in ContexttMenuStrip wieder zu entfernen?

  • VB.NET
  • .NET (FX) 4.5–4.8

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

    Ist es nötig den Handler in ContexttMenuStrip wieder zu entfernen?

    Ich benutze noch den guten alten ZedGraph.
    Klicke ich in den Graph, kann ich mittels rechter Maustaste ein Kontextmenü öffnen.
    Mittels des 'ContextMenuBuilder' Event füge ich mir einen Handler hinzu, da ich gerne wissen möchte welches Item des Kontextmenüs benutzt werden soll.
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub zgc_DataLogger_ContextMenuBuilder(ByVal _sender As ZedGraph.ZedGraphControl,
    2. ByVal _ContextMenuStrip As ContextMenuStrip,
    3. ByVal _MousePt As Point,
    4. ByVal _objState As ZedGraph.ZedGraphControl.ContextMenuObjectState) Handles zgc_DataLogger.ContextMenuBuilder
    5. If Not bZedGraphContextMenuStripAlreadyModified Then
    6. AddHandler _ContextMenuStrip.ItemClicked, AddressOf ContextMenuStrip_ItemClicked
    7. bZedGraphContextMenuStripAlreadyModified = True
    8. End If
    9. End Sub
    10. Private Sub ContextMenuStrip_ItemClicked(ByVal sender As Object, ByVal e As ToolStripItemClickedEventArgs)
    11. If e.ClickedItem.ToString() = "Un-Zoom" Then
    12. '...
    13. ElseIf e.ClickedItem.ToString() = "Undo All Zoom/Pan" Then
    14. '...
    15. ElseIf e.ClickedItem.ToString() = "Set Scale to Default" Then
    16. '...
    17. End If
    18. End Sub


    Jetzt meine Frage: wird der Handler beim Schließen des Forms auf dem diese ZED-Graph Instanz benutzt wird automatisch entfernt?
    Oder muss ich das manuell machen?
    Die Frage ist nämlich in diesem Falle wie?
    Indem ich mir in der .Close() das ContextMenuBuilder Event manuell aufrufe und dann darin den Handler entferne?

    roepke schrieb:

    Jetzt meine Frage: wird der Handler beim Schließen des Forms auf dem diese ZED-Graph Instanz benutzt wird automatisch entfernt?
    Ja - mW schon...
    :whistling: Aber: stackoverflow.com/questions/25…e-all-event-registrations

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

    roepke schrieb:

    wird der Handler beim Schließen des Forms auf dem diese ZED-Graph Instanz benutzt wird automatisch entfernt?

    Ja, und zwar, weil die Handler-Methode auf dem Form ist.
    Ist das Form weg, dann ist die Handler-Methode weg, und dann kann auch das ZedGraph-Dingens GarbageCollected werden.
    Wobei ich allerdings fast vermute, das ZedGraph-Dingens ist disposable, und muss disposed werden.
    Wenn es eine Component ist, die auf dem Form aufsitzt, und ist ordentlich programmiert, dann passiert das auch bereits beim Schliessen des Forms.

    Ich glaub, was da aus stackoverflow steht ist nicht richtig.
    Ein WinForms-Control, wenn es disposed wird löscht seine EventHandler-List - das ist ein alternativer Vorgang zum Deregistrieren aller Handler.
    Sowas hatten wir vor einiger Zeit: Disposen von Laufzeit-Ereignishandlern
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.