Exemplarische Vorgehensweise: Wechseln zwischen Menüstrukturen von Windows Forms auf der Grundlage des Anwendungsstatus unter Verwendung von Visual J#

Eine Anwendung kann verschiedene Menüs für verschiedene Kontexte (bzw. jeden einzelnen Anwendungsstatus) anzeigen. Es können mehrere MainMenu-Objekte verwendet werden, mit denen jeweils eine andere Menüauswahl zur Verfügung gestellt wird. Mit mehreren MainMenu-Objekten zur Darstellung der richtigen Menüstruktur können Sie jeden beliebigen, durch Benutzerinteraktionen hervorgerufenen Status der Anwendung verarbeiten.

In dieser Vorgehensweise erstellen Sie eine Menüstruktur, die beim Öffnen der Anwendung angezeigt wird, wenn es weder eine Datei noch Daten gibt, mit denen der Benutzer interagieren kann. Die Anwendung zeigt in diesem Fall nur ein Menü Datei mit den Befehlen Neu, Öffnen und Beenden. Wenn der Benutzer Neu oder Öffnen wählt, wird dadurch eine Änderung des Anwendungsstatus ausgelöst. (Zu Demonstrationszwecken wird im folgenden Beispiel ein Meldungsfeld als visuelle Hilfe angezeigt. Es werden keine Dateien geöffnet oder erstellt.) Zu diesem Zeitpunkt wird eine zweite Menüstruktur mit weiteren Menüelementen (Schließen und Speichern) gezeigt. Diese Elemente werden für eine Anwendung mit geladener Datei bzw. geladenen Daten verwendet.

Erstellen eines Menüs zur Entwurfszeit

Mit der folgenden schrittweisen Anweisung wird im Windows Forms-Designer eine Windows-Anwendung erstellt, deren Menüstruktur wechselt.

So erstellen Sie ein Menü zur Entwurfszeit

  1. Erstellen Sie ein neues Projekt vom Typ Windows-Anwendung.
  2. Ziehen Sie eine MainMenu-Komponente von der Toolbox in das Formular.
  3. Erstellen Sie im Menü-Designer ein Menüelement der obersten Ebene, für dessen Text-Eigenschaft &File angegeben wird. Erstellen Sie außerdem drei Untermenüelemente mit den Text-Eigenschaften &New, &Open und E&xit in der angegebenen Reihenfolge. Einzelheiten dazu finden Sie unter Hinzufügen von Menüs und Menüelementen zu Windows Forms.
  4. Klicken Sie im Windows Forms-Designer auf das Formular, damit es den Fokus erhält. Stellen Sie im Eigenschaftenfenster sicher, dass für die Menu-Eigenschaft das soeben erstellte Menü angegeben wird (mainMenu1, außer Sie haben einen eindeutigen Namen zugewiesen).

So fügen Sie Ereignisse ein

  1. Erstellen Sie einen Multicastereignishandler mit der Bezeichnung MenuSelect für die Menüelemente Neu und Öffnen. Sie müssen dem Ereignishandler folgendermaßen Verweise in der form-Initialisierungsfunktion für Visual J# hinzufügen:

    // Visual J#
    this.menuItem2.add_Click( new System.EventHandler(this.MenuSelect) );
    this.menuItem3.add_Click( new System.EventHandler(this.MenuSelect) );
    

    Dies ist ein Multicastereignishandler, da er die Click-Ereignisse für beide Menüelemente behandelt. Einzelheiten dazu finden Sie unter Verbinden mehrerer Ereignisse mit einem einzelnen Ereignishandler in Windows Forms.

  2. Geben Sie folgenden Code im MenuSelect-Ereignishandler ein:

    // Visual J#
    private void MenuSelect(Object sender, System.EventArgs e)
    {
       MessageBox.Show("A file has been opened.", "Instead of a new file, here's a message box.");
       LoadSecondMenu();
    }
    

    Hinweis   Die LoadSecondMenu-Prozedur schreiben Sie, damit sich das Menü ändert, wenn auf eines der Menüelemente (Neu oder Öffnen) geklickt wird.

  3. Erstellen Sie im Code-Editor eine Methode, die mit der folgenden vergleichbar ist, um die zweite von Ihnen erstellte MainMenu-Komponente als Menü des Formulars festzulegen.

    // Visual J#
    private void LoadSecondMenu()
    {
       this.set_Menu ( mainMenu2);
    }
    

    Hinweis   MainMenu2 bezieht sich auf eine MainMenu-Komponente, die Sie dem Formular später hinzufügen.

So kopieren Sie die Menüs für die zweite Gruppe

  1. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf den Namen des Formulars, und wählen Sie im Kontextmenü die Option Designer anzeigen.

  2. Klicken Sie im Komponentenfach auf das Symbol für die MainMenu-Komponente, damit sie den Fokus im Formular besitzt.

  3. Klicken Sie im Menü-Designer auf das von Ihnen erstellte Menü der obersten Ebene (Datei). Klicken Sie mit der rechten Maustaste, und wählen Sie Kopieren.

    Hinweis   Dadurch wird eine Kopie des Menüelements der obersten Ebene und aller Untermenüelemente erstellt.

  4. Ziehen Sie eine weitere MainMenu-Komponente aus der Toolbox in das Formular.

  5. Klicken Sie im Menü-Designer mit der rechten Maustaste auf den Bereich "Hier eingeben", und wählen Sie Einfügen.

    Die Menüelemente, die Sie zuvor aus der ersten MainMenu-Komponente ausgewählt haben, werden in die zweite eingefügt.

  6. Klicken Sie im Menü-Designer mit der rechten Maustaste auf den Bereich links vom Menüelement Beenden, und wählen Sie Neue einfügen. Wiederholen Sie diesen Vorgang, um zwei neue Menüelemente einzufügen.

  7. Legen Sie für die Text-Eigenschaft der zwei neuen Menüelemente &Close und &Save in dieser Reihenfolge fest. Dazu öffnen Sie das Eigenschaftenfenster oder klicken auf das Element und geben den Wert in den dafür vorgesehenen Bereich ein.

So testen Sie die Anwendung

  • Drücken Sie F5, um die Anwendung auszuführen. Debuggen Sie die Anwendung ggf. Einzelheiten zum Debuggen finden Sie unter Grundlagen des Debuggens.

    Das Formular besitzt ein Menü mit den Menüelementen Datei, Neu, Öffnen und Beenden. Wenn Sie auf Neu oder Öffnen klicken, wird ein Ereignis ausgelöst, das vom MenuSelect-Ereignishandler behandelt wird. Diese Methode zeigt ein Meldungsfeld und ändert den Anwendungsstatus. Die Änderung des Anwendungsstatus wird durch die zwei neu hinzugefügten Menüelemente Schließen und Speichern angezeigt.

Diese Vorgehensweise ist nicht zwingend erforderlich, Sie können die gesamte Anwendung auch in Code erstellen. Obwohl in diesem Fall die Vorteile des komfortablen Windows Forms-Designers nicht zur Verfügung stehen, bevorzugen manche Entwickler diese Methode.

Programmgesteuertes Erstellen eines Menüs

Mit der folgenden schrittweisen Anweisung wird eine Windows-Anwendung (mit identischen Ergebnissen wie im vorherigen Beispiel) exklusiv über Code erstellt, der Menüstrukturen wechselt.

So erstellen Sie ein Menü programmgesteuert

  1. Erstellen Sie ein neues Projekt vom Typ Windows-Anwendung.

  2. Erstellen Sie in einer Methode eine Instanz der MainMenu-Komponente mit MenuItem-Objekten, die dem Anwendungsstatus entsprechen.

    Im folgenden Beispiel gibt es ein MainMenu-Objekt, das dem ersten Öffnen der Anwendung durch den Benutzer entspricht. Es gibt nur ein traditionelles Menü Datei mit den Befehlen Neu, Öffnen und Beenden. Der folgende Code verwendet außerdem eine überladene Add-Methode, die Menüelemente und zugehörige Ereignishandler erstellt. Durch dynamisches Verknüpfen von Ereignishandlern kann der Anwendung leicht signalisiert werden, dass durch Klicken auf den Menübefehl Neu oder Öffnen eine Änderung des Anwendungsstatus ausgelöst wird.

    // Visual J#
    // Create a MainMenu object and a MenuItem object.
    MainMenu mmAppStart;
    MenuItem miFile;
    public void AppStartMenu()
    {
       // Create an instance of the MainMenu object.
       mmAppStart = new MainMenu();
    
       // Create a top-level menu item and two menu items. Use this
       // overloaded constructor that takes an event handler
       // (MenuSelect) so that later, you can cause the menu selection
       // to change the application state.
       miFile = new MenuItem("&File", new System.EventHandler(MenuSelect));
       miFile.get_MenuItems().Add("&New", new System.EventHandler(MenuSelect));
       miFile.get_MenuItems().Add("&Open", new System.EventHandler(MenuSelect));
       miFile.get_MenuItems().Add("&Exit");
    
       // Add the top-level menu item to the MainMenu component 
       // and set the MainMenu component to be the form's menu.
       mmAppStart.get_MenuItems().Add(miFile);
    
       // Set the form's menu to the menu you have just created.
       this.set_Menu ( mmAppStart);
    }
    

So erstellen Sie die zweite Menügruppe

  1. Erstellen Sie in einer zweiten Methode eine zweite Instanz der MainMenu-Komponente mit MenuItem-Objekten, die einem zweiten Anwendungsstatus entsprechen.

    Nachdem der Benutzer eine Datei geöffnet hat, können Sie beispielsweise Befehle zum Schließen und Speichern bereitstellen. Sie haben die Möglichkeit, die Originalmenüstruktur zu kopieren und als Grundlage für diese Menüstruktur zu verwenden. Die Menüelemente Datei, Neu, Öffnen und Beenden werden beibehalten. Einzelheiten dazu finden Sie unter Kopieren von Elementen in Windows Forms-Menüs.

    // Visual J#
    // Create the second MainMenu object
    private MainMenu mmFileLoadedMenu;
    private void FileLoadedMenu()
    {
       // Clone first menu
       mmFileLoadedMenu = mmAppStart.CloneMenu();
    
       // Add Close and Save menu items to the new menu's File menu items,
       // using the Add method to specify their order within the collection.
       MenuItem miFile = mmFileLoadedMenu.get_MenuItems().get_Item(0);
       miFile.get_MenuItems().Add(2, new MenuItem("&Close"));
       miFile.get_MenuItems().Add(3, new MenuItem("&Save"));
    
       // Assign the newly-created MainMenu object to the form.
       this.set_Menu(mmFileLoadedMenu);
    }
    
  2. Fügen Sie dem Form1-Konstruktor nach dem InitializeComponent-Methodenaufruf eine Codezeile hinzu, um die zuvor erstellte AppStartMenu-Methode aufzurufen:

    // Visual J#
    AppStartMenu();
    
  3. Erstellen Sie einen Ereignishandler in der Klasse, um die Menüeigenschaft des Formulars in FileLoadedMenu zu ändern.

    Mit dem folgenden Code wird keine Datei geladen, sondern ein Meldungsfeld geöffnet, um auf eine Änderung des Anwendungsstatus hinzuweisen. Ausführliche Informationen finden Sie unter MessageBox-Klasse. Der Code ruft anschließend die AppStartMenu-Methode auf, die zuvor geschrieben wurde. Dadurch wird das zweite MainMenu-Objekt erstellt und als Menü des Formulars festgelegt.

    // Visual J#
    protected void MenuSelect(Object sender, System.EventArgs e)
    {
       MessageBox.Show("A file has been opened.", "Instead of a new file, here's a message box.");
       FileLoadedMenu();
    }
    

So testen Sie die Anwendung

  • Drücken Sie F5, um die Anwendung auszuführen. Debuggen Sie die Anwendung ggf. Einzelheiten zum Debuggen finden Sie unter Grundlagen des Debuggens.

    Das Formular besitzt ein Menü mit den Menüelementen Datei, Neu, Öffnen und Beenden. Wenn Sie auf Neu oder Öffnen klicken, wird ein Ereignis ausgelöst, das vom MenuSelect-Ereignishandler behandelt wird. Diese Methode zeigt ein MessageBox-Ereignis und ändert den Anwendungsstatus. Die Änderung des Anwendungsstatus wird durch die zwei neu hinzugefügten Menüelemente Schließen und Speichern angezeigt.

Siehe auch

Einführung in die MainMenu-Komponente in Windows Forms | Menüs in Windows Forms | Exemplarische Vorgehensweisen für Windows Forms