none
VS2013 - Verschieben eines Menüeintrages killt Code-Zuordnung

    Frage

  • Wiederholt habe ich jetzt Menüeinträge mit der Maus innerhalb eines menüstrips verschoben.

    Dabei ging irgendwie die Zuordnung zu den beriets hinterlegtn Click-Eriegnissen verloren, obwohl ich am Namen nichts geändert habe.

    Wenn ich dann mit Rechtsklick/Code anzeigen in den Code wechsele, lande ich in einer leeren Ereignis-Routine.

    Wie gesagt, Code ist eigentlich bereits vorhanden.

    Ähnliches passiert, wenn ich bei einem bereits erstellten Control den Namen ändere (was für mich noch nachvollziehbar ist.

    Kann ich da irgendwas dagegen tun ?

    Dienstag, 25. Februar 2014 10:48

Antworten

  • Der Ereignishandler ist auch nur eine Methode. Und diese Methode hat erstmal nichts mit dem Control zu tun. Beide agieren grundsätzlich unabhängig von einander. Erst das Verknüpfen mit AddHandler bzw. des Handles-Anhangs der Methode, ändert dies.

    D.h. also, dass wenn du das Control im Designer umbenennst, es die Methode nicht betrifft. Anders herum ist es ebenfalls so. Der Designer erkennt die Umbenennung im Designer und ändert entsprechend den Handles-Anhang. Wenn du den Methodennamen änderst, registriert das der Designer und aktualisiert die Informationen in der Ereignisanzeige.

    Soweit ich mich noch erinnere, war es auch schon zu VS 2008 SP1 Zeiten so.

    Wenn du einen Doppelklick auf ein Control im Designer machst, landest du im Eventhandler des angegebenen Standardevents. Bei den meisten Controls ist das das Click-Event.
    Das geht am schnellsten, bei anderen Events kannst du entweder den Code amnuell durchsuchen oder einen Doppelklick auf den Eventhandlernamen im Eigenschaftenfenster machen:

    Wenn du auf ein leeres feld doppelt klickst, wird ein neuer Eventhandler für das Event angelegt.


    Koopakiller [kuːpakɪllɐ] (Tom Lambert)
    Webseite | Code Beispiele | Facebook | Twitter | Snippets   C# ↔ VB.NET Konverter
    Markiert bitte beantwortende Posts als Antwort und bewertet Beiträge. Danke.

    Dienstag, 25. Februar 2014 19:03

Alle Antworten

  • Hi NicoNi,

    erstmal Hilft es im Forum, genau zu Beschreiben, was du wann wo (ich rate hier mal Desinger) machst. Und bei Oberflächen welche Technologie Forms/Wpf. Sonst muss man beim Beantworten raten und du beskommst nicht unbeding die Antwort die du möchtest.

    Wenn es jetzt um den Desinger geht, gehe ich jetzt mal davon aus, das wenn du einen Menüeintrag mit der Maus verschiebst. Der eintrag erstmal aus dem CodeBehind/XAML entfernt wird. Und erst wider vom Desinger eingefügt wird. Dabei geht die Zuweisung zum Event verloren. Bei den Eigenschaften solltest du das Event aber wieder setzen können.

    MFG

    Björn 

    Dienstag, 25. Februar 2014 11:23
  • Hallo,
    das von dir beschriebene Verhalten sollte eigentlich nicht so sein. Durch das Verschieben sollte nichts beeinflusst werden. Das Umbenennen eines Controls sollte VS ebenfalls mit bekommen. Ich habe es eben nochmal im 2013er getestet.
    Welche Visual Studio Version nutzt du denn (2010, 2013, .../ für Windows Desktop)?
    Versuche mal VS über Extras > Einstellungen importieren- oder exportieren zurück zu setzen und ggf. mal neu zu installieren.

    Werden denn im Quellcode die alten Eventhandler gelöscht?
    Wenn nein, kannst du diese über das Eigenschaftenfenster neu verknüpfen. Wähle dazu das Menuitem aus, drücke F4 (Eigenschaftenfenster) und wechsle in die Liste Ereignisse (). Dort bekommst du für das Click-Ereignis eine Liste möglicher Methoden angezeigt. Du kannst die Verknüpfung aber auch im Code wiederherstellen, indem du das Handled-Schlüsselwort an die alte Methode verschiebst:

    Private Sub ToolStripMenuItem2_Click(sender As Object, e As EventArgs) Handles ToolStripMenuItem2.Click


    Koopakiller [kuːpakɪllɐ] (Tom Lambert)
    Webseite | Code Beispiele | Facebook | Twitter | Snippets   C# ↔ VB.NET Konverter
    Markiert bitte beantwortende Posts als Antwort und bewertet Beiträge. Danke.

    Dienstag, 25. Februar 2014 11:30
  • Ich gliedere das mal in 2 Teilprobleme ...

    ich benutze VS2013, Designer mit Forms.

    Ich habe einen menüStrip mit einigen Einträgen nebst "Click"-Code, der auch funktioniert.

    Jetzt gehe ich in dewr Code-Anzeige auf den _Click-Eintrag -> Umbenennen und ändere den Namen (nach Private Sub ...)

    Das funktioniert, keine Fehlermeldung in der Code-Anzeige.

    Jetzt mit Rechtsklick auf den Ansichts-Designer umgeschaltet  ... KEINE Änderung des Control-Namens

    Ich sehe gerade, daß ich mit Rechtsklick auf den menü-Eintrag im Form-Entwurf NICHT auf den Click-Code komme - und zwar bei allen EInträgen. War das nicht mal anders? Trifft auch auf alle Buttons zu :-(

    Das Projekt ist übrigens ursprünglich mal unter VS2010 begonnen worden.

    Dienstag, 25. Februar 2014 18:01
  • Der Ereignishandler ist auch nur eine Methode. Und diese Methode hat erstmal nichts mit dem Control zu tun. Beide agieren grundsätzlich unabhängig von einander. Erst das Verknüpfen mit AddHandler bzw. des Handles-Anhangs der Methode, ändert dies.

    D.h. also, dass wenn du das Control im Designer umbenennst, es die Methode nicht betrifft. Anders herum ist es ebenfalls so. Der Designer erkennt die Umbenennung im Designer und ändert entsprechend den Handles-Anhang. Wenn du den Methodennamen änderst, registriert das der Designer und aktualisiert die Informationen in der Ereignisanzeige.

    Soweit ich mich noch erinnere, war es auch schon zu VS 2008 SP1 Zeiten so.

    Wenn du einen Doppelklick auf ein Control im Designer machst, landest du im Eventhandler des angegebenen Standardevents. Bei den meisten Controls ist das das Click-Event.
    Das geht am schnellsten, bei anderen Events kannst du entweder den Code amnuell durchsuchen oder einen Doppelklick auf den Eventhandlernamen im Eigenschaftenfenster machen:

    Wenn du auf ein leeres feld doppelt klickst, wird ein neuer Eventhandler für das Event angelegt.


    Koopakiller [kuːpakɪllɐ] (Tom Lambert)
    Webseite | Code Beispiele | Facebook | Twitter | Snippets   C# ↔ VB.NET Konverter
    Markiert bitte beantwortende Posts als Antwort und bewertet Beiträge. Danke.

    Dienstag, 25. Februar 2014 19:03