none
Menue in Classe verarbeiten

    Frage

  • Hallo Forum,

    ich hab mir ein Menu gemacht, das sich immer auf die Form bezieht. ( Macht diverse Änderungen )

    Nun verwende ich das in etlichen Forms. Kann ich irgendwie eine Klasse aufrufen wenn ein User etwas im Menu auswählt ?

    Möchte aber in der Form nicht auf jeden Klick bei einer Auswahl reagieren, sondern mit einem Aufruf die Klasse starten und dann dort die Auswahl abfragen und dann die entsprechende Aktion ausführen.

    Wie geht so was ?


    Gruß Roland

    Dienstag, 15. Oktober 2013 17:03

Antworten

  • Du kannst, wie bereits erwähnt, einen Handler für mehrere Events nutzen:
            private void ClickEventHandler(object sender, EventArgs e)
            {
                MessageBox.Show((sender as MenuItem).Name);//Namen abrufen
            }
                this.ToolStripMenuItem1.Click += new System.EventHandler(this.ClickEventHandler);
                this.ToolStripMenuItem2.Click += new System.EventHandler(this.ClickEventHandler);
                this.ToolStripMenuItem3.Click += new System.EventHandler(this.ClickEventHandler);
    Du kannst auch einfach im Designer die Items auswählen, F4 drücken, zu den Ereignissen wechseln und unter Click den Eventhandler auswählen.


    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.

    • Als Antwort markiert Roland DE Freitag, 18. Oktober 2013 09:07
    Dienstag, 15. Oktober 2013 20:11
    Moderator

Alle Antworten

  • Hallo,
    es verhält sich hier nicht viel anders, als bei deiner anderen Frage.

    Du musst für jeden Menüpunkt eine Entsprechende Methode aus deiner Klasse aufrufen. Eventuell muss die Klasse zuvor noch initialisiert werden (mit new erzeugen, wenn die Instanz nicht in der Klasse liegt).

    Wenn du 10 Menüpunkte hast, dann brauchst du in der Regel auch 10 Eventhandler, die die Klicks verarbeiten. Du kannst bei ähnlichen Vorgängen auch den selben Handler für das Click-Event registrieren und und dann das auslösende MenuItem über den sender-Parameter heraus bekommen. (Unterscheidung bspws. an der Name-Eigenschaft). Dann kannst du entsprechend verschiedene Parameter an die selbe Methode der Klasse übergeben.

    Grundsätlich gilt aber auch hier. Trenne die Logik vom Design. Mache es also so, das die Klasse nichts von der Form kennt. Die Form ruft nur Methoden etc. von der Klasse auf.


    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, 15. Oktober 2013 17:13
    Moderator
  • Hallo Tom,

    die Trennung hab ich schon. Aber wie du ja schreibst wenn man 10 Menüpunkte hat, dann hat man auch 10 x ein Click Event.

    Meine Idee war ob es nicht eine "gemeinsames Click Event" für das ganze Menü gibt wo ich dann in der Klasse nach dem Namen die einzelnen Abfragen / Ausführungen machen kann. Bisher hab ich es so, das ich in jedem Click Event die entsprechenden Teile in der Klasse aufrufe. Aber nur ein Eintrag in der

    Form wäre einfacher gewesen.

    Danke für Deine Antwort.


    Gruß Roland

    Dienstag, 15. Oktober 2013 19:55
  • Du kannst, wie bereits erwähnt, einen Handler für mehrere Events nutzen:
            private void ClickEventHandler(object sender, EventArgs e)
            {
                MessageBox.Show((sender as MenuItem).Name);//Namen abrufen
            }
                this.ToolStripMenuItem1.Click += new System.EventHandler(this.ClickEventHandler);
                this.ToolStripMenuItem2.Click += new System.EventHandler(this.ClickEventHandler);
                this.ToolStripMenuItem3.Click += new System.EventHandler(this.ClickEventHandler);
    Du kannst auch einfach im Designer die Items auswählen, F4 drücken, zu den Ereignissen wechseln und unter Click den Eventhandler auswählen.


    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.

    • Als Antwort markiert Roland DE Freitag, 18. Oktober 2013 09:07
    Dienstag, 15. Oktober 2013 20:11
    Moderator
  • Hallo Tom,

    Danke für die Info.

    So geht es

    MessageBox.Show((sender as ToolStripMenuItem).Name);//Namen abrufen


    Gruß Roland

    Mittwoch, 16. Oktober 2013 11:22