Per Mausklick bewerten und Feedback geben
MSDN
MSDN Library
Entwicklerbibliothek
.NET-Entwicklung
.NET Framework
Allgemein
 Erstellen von dynamischen Menüs in ...
Erstellen von dynamischen Menüs in .NET-Anwendungen
Veröffentlicht: 11. Aug 2003 | Aktualisiert: 28. Jun 2004
Von Frank C. Rice

Auf dieser Seite

Einführung Einführung
Erstellen eines Menüs zur Entwurfszeit Erstellen eines Menüs zur Entwurfszeit
Verknüpfen der Ereignisse Verknüpfen der Ereignisse
Erstellen eines alternativen Menüs Erstellen eines alternativen Menüs
Hinzufügen von weiteren Menüfunktionen Hinzufügen von weiteren Menüfunktionen
Testen der Anwendung Testen der Anwendung
Programmtechnisches Erstellen eines Menüs Programmtechnisches Erstellen eines Menüs
Programmtechnisches Erstellen von alternativen Menüs Programmtechnisches Erstellen von alternativen Menüs
Schlussfolgerung Schlussfolgerung

Einführung

Mit Microsoft .NET erstellte Anwendungen können für verschiedene Kontexte (oder verschiedene Anwendungsstatusarten) unterschiedliche Menüs anzeigen. Die entsprechenden Menüstrukturen werden unter Verwendung des MainMenu-Steuerelements in Microsoft .NET-Formularen erstellt. Das MainMenu-Steuerelement stellt dabei den Container für die Menüstruktur eines Formulars dar. Ein Menü besteht aus MenuItem-Objekten, die die einzelnen Menübefehle in der Menüstruktur bilden. Jedes MenuItem-Objekt kann ein Befehl für Ihre Anwendung oder ein übergeordnetes Menü für Elemente anderer Untermenüs sein. Um das MainMenu-Steuerelement an das Formular zu binden, das es anzeigen soll, weisen Sie MainMenu der Menu-Eigenschaft des Formulars zu.

Sie können eine Vielzahl von MainMenu-Objekten einrichten, von denen jedes dem Benutzer unterschiedliche Menüeinträge anzeigt. Wenn Sie mehrere MainMenu-Objekte verwenden, um dem Benutzer die korrekte Menüstruktur anzuzeigen, hilft Ihnen dies, die bei der Benutzerinteraktion wechselnden Statusarten Ihrer Anwendung zu managen.

In der nachfolgenden Prozedur werden Sie eine Menüstruktur erstellen, die beim ersten Öffnen der Anwendung angezeigt wird, wenn noch keine Datei oder Daten vorliegen, mit denen der Benutzer interagieren kann. Die Anwendung enthält also nur ein ganz normales File-Menü mit den Befehlen New, Open und Exit. Wenn der Benutzer das Menüelement New auswählt, wird eine leere Microsoft Office Excel 2003-Arbeitsmappe geöffnet. Wenn der Benutzer das Menüelement Open auswählt, wird eine leere Excel-Arbeitsmappe geöffnet und mit einigen rudimentären Daten gefüllt. Die beiden Menüelemente New und Open lösen eine Veränderung im Anwendungsstatus aus, aufgrund der eine zweite Menüstruktur mit zusätzlichen Menüelementen (Close Workbook und Print Preview) für die Excel-Arbeitsmappe angezeigt wird.

Erstellen eines Menüs zur Entwurfszeit

Nachfolgend finden Sie schrittweise Anleitungen zur Erstellung einer Microsoft Windows®-Anwendung mit wechselnden Menüstrukturen im Windows Forms-Designer:

  • Starten Sie Microsoft Visual Studio® .NET, und erstellen Sie eine neue Visual Basic®-Windows-Anwendung.

  • Fügen Sie der Microsoft Excel-Objektbibliothek einen Verweis hinzu. Führen Sie dazu folgende Schritte aus:

    • Klicken Sie im Menü Projekt auf Verweis hinzufügen.

    • Klicken Sie auf die Registerkarte COM, suchen Sie nach der Microsoft Excel Object Library, und klicken Sie auf Auswählen.

    • Klicken Sie im Dialogfeld Verweis hinzufügen auf OK, um Ihre Auswahl zu bestätigen.

  • Ziehen Sie eine MainMenu-Komponente von der Toolbox auf das Formular, wie in Abbildung 1 dargestellt.

    office06052003-fig01.gif

    Abbildung 1. "MainMenu"-Komponente auf dem Formular

  • Erstellen Sie im Menü-Designer ein Menüelement der obersten Ebene, bei dem Sie die Text-Eigenschaft auf &File festlegen (nehmen Sie dazu einfach die entsprechende Eingabe im Feld Type Here (Hier eingeben) vor), sowie drei Untermenüelemente, bei denen Sie die Text-Eigenschaften auf &New, &Open und E&xit (in dieser Reihenfolge) festsetzen.

  • Klicken Sie nacheinander auf jedes dieser Menüelemente, und weisen Sie die Name-Eigenschaft gemäß der folgenden Tabelle zu:

    Standardname Neuer Name MenuItem1 File MenuItem2 New MenuItem3 Open MenuItem4 Exit

  • Klicken Sie im Windows Forms-Designer auf das Formular (Form1.vb), um den Fokus darauf zu richten. Überprüfen Sie im Fenster Eigenschaften, ob für die Menu-Eigenschaft das gerade von Ihnen erstellte Menü festgelegt ist (MainMenu1).

Verknüpfen der Ereignisse

.NET ermöglicht es Ihnen, mit einem einzigen Handler mehrere Ereignisse zu verarbeiten, wenn diese Ereignisse auf dieselbe Funktion weisen. Diese Art von Handler wird als Multicast-Ereignishandler bezeichnet.

  • Erstellen Sie einen Multicast-Ereignishandler für die beiden Exit-Menüelemente (ein bereits vorhandenes Exit-Menüelement und ein weiteres, das Sie in Kürze erstellen werden), indem Sie folgenden Eintrag hinzufügen:

    Anmerkung Sie erstellen die Shell für diese Prozedur, indem Sie auf das Exit-Menüelement doppelklicken und dann nach der Handles Excel1.Click-Direktive den Eintrag Exit2.Click einfügen.

    Private Sub Exit_Click(ByVal sender As System.Object, _ 
     ByVal e As System.EventArgs) Handles Exit.Click, _ 
     Exit1.Click 
     ' Shut down Excel. 
     oXL.Quit() 
     oXL = Nothing 
    End Sub
    

    Bei dieser Unterroutine bedeuten die beiden Click-Ereignisse, die dem Schlüsselwort Handles folgen, dass durch Klicken auf eines der beiden Exit-Menüelemente die Anweisung zum Schließen von Form1 ausgeführt wird.

  • Erstellen Sie nun im Code-Editor eine Methode ähnlich der nachfolgenden, um für das Menü des Formulars die zweite MainMenu-Komponente festzulegen, die Sie im nächsten Schritt erstellen werden:

    Private Sub LoadSecondMenu() 
       Me.Menu = MainMenu2 
    End Sub
    

Erstellen eines alternativen Menüs

  1. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf den Formularnamen, und wählen Sie Designer anzeigen aus dem Kontextmenü aus.

  2. Klicken Sie im Komponentenfach (Component Tray) auf das Symbol für die MainMenu1-Komponente (siehe Abbildung 2 unten), damit der Fokus darauf gerichtet ist.

    office06052003-fig02.gif

    Abbildung 2. Komponentenfach

  3. Klicken Sie im Menü-Designer auf das von Ihnen erstellte Menüelement der obersten Ebene (File). Klicken Sie mit der rechten Maustaste, und wählen Sie Kopieren.
    Anmerkung Damit erstellen Sie eine Kopie des Menüelements der obersten Ebene und all seiner Untermenüelemente.

  4. Ziehen Sie eine weitere MainMenu-Komponente von der Toolbox auf das Formular.

  5. Klicken Sie im Menü-Designer mit der rechten Maustaste auf den Bereich Type Here (Hier eingeben), und wählen Sie die Option Einfügen.

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

  7. Klicken Sie im Menü-Designer mit der rechten Maustaste auf den Bereich links des Menüelements Exit, und wählen Sie Neue einfügen aus. Führen Sie diesen Schritt noch einmal durch, um insgesamt zwei neue Menüelemente einzufügen.

  8. Legen Sie für die Text-Eigenschaft dieser beiden Menüelemente &Print Preview und &Close Workbook (in dieser Reihenfolge) fest. Verwenden Sie dazu entweder das Fenster Eigenschaften, oder klicken Sie auf das Element, und geben Sie den Namen in den dafür vorgesehenen Platz ein.

    office06052003-fig03.gif

    Abbildung 3. Alternatives Menü

  9. Klicken Sie nacheinander auf jedes dieser Menüelemente, und weisen Sie die Name-Eigenschaft gemäß der folgenden Tabelle zu:

    Standardname Neuer Name MenuItem5 File1 MenuItem6 New1 MenuItem7 Open1 MenuItem8 Print MenuItem9 Close MenuItem10 Exit1

Hinzufügen von weiteren Menüfunktionen

Mit der nachfolgenden Unterroutine öffnen Sie eine Excel-Instanz unter Verwendung eines als Automatisierung bezeichneten Prozesses. Automatisierung ermöglicht es in Sprachen wie Visual Basic oder C# (C Sharp ausgesprochen) geschriebenen Programmen, andere Anwendungen programmtechnisch zu steuern. Wie Sie hier sehen, können Sie mithilfe von Automatisierung verschiedene Vorgänge ausführen, wie beispielsweise eine neue Arbeitsmappe erstellen oder der Arbeitsmappe Daten hinzufügen. Wenn die Arbeitsmappe mit Daten gefüllt ist, wird die Funktion zum Laden des alternativen Menüs aufgerufen. Fügen Sie dem Codefenster Folgendes hinzu:

Public oXL As Excel.Application 
Private Sub Open_Click(ByVal sender As Object, _ 
 ByVal e As System.EventArgs) Handles Open.Click, Open1.Click 
 Dim oWB As Excel.Workbook 
 Dim oSheet As Excel.Worksheet 
 oXL = CreateObject("Excel.Application") 
 oXL.Visible = True 
 ' Get a new workbook. 
 oWB = oXL.Workbooks.Add 
 oSheet = oWB.ActiveSheet 
 ' Add table headers to each column. 
 oSheet.Cells(1, 1).Value = "First Name" 
 oSheet.Cells(1, 2).Value = "Last Name" 
 ' Populate with sample names. 
 oSheet.Cells(2, 1).Value = "Nancy" 
 oSheet.Cells(2, 2).Value = "Davolio" 
 oSheet.Cells(3, 1).Value = "Janet" 
 oSheet.Cells(3, 2).Value = "Leverling" 
 ' Load the alternate menu. 
 LoadSecondMenu() 
End Sub

Die nächste Unterroutine wird ausgeführt, sobald der Benutzer auf das Menüelement New klickt. Sie öffnet vor dem Laden des alternativen Menüs zunächst eine leere Arbeitsmappe. Fügen Sie dem Codefenster die folgende Unterroutine hinzu:

Private Sub New_Click(ByVal sender As System.Object, _ 
 ByVal e As System.EventArgs) Handles New.Click, New1.Click 
 Dim oWB As Excel.Workbook 
 Dim oSheet As Excel.Worksheet 
 oXL = CreateObject("Excel.Application") 
 oXL.Visible = True 
 ' Get a new blank workbook. 
 oWB = oXL.Workbooks.Add 
 oSheet = oWB.ActiveSheet 
 ' Load the alternate menu. 
 LoadSecondMenu() 
End Sub

Die nächste Unterroutine wird ausgeführt, wenn der Benutzer auf das Menüelement Print Preview klickt. Fügen Sie dem Codefenster die folgende Prozedur hinzu:

Private Sub Print_Click(ByVal sender As System.Object, _ 
 ByVal e As System.EventArgs) Handles Print.Click 
 ' Print Preview menu item. 
 oXL.ActiveSheet.PrintPreview() 
End Sub 

Die letzte Prozedur schließt die Excel-Instanz, wenn der Benutzer auf das Menüelement Close Worksheet klickt. Fügen Sie dem Codefenster auch die folgende Prozedur hinzu:

Private Sub Close_Click(ByVal sender As System.Object, _ 
 ByVal e As System.EventArgs) Handles Close.Click 
 ' Exit menu items. 
 Form1.ActiveForm.Close() 
End Sub

Testen der Anwendung

Drücken Sie F5, um die Anwendung zu starten. Das Formular verfügt über ein Menü mit den Elementen File, New, Open und Exit. Wenn Sie auf New oder Open klicken, lösen Sie ein Ereignis aus, das von den entsprechenden Ereignishandlern verarbeitet wird. Diese Methoden laden entweder eine neue, leere Arbeitsmappe oder laden eine Arbeitsmappe und füllen diese dann mit Daten. Darüber hinaus ändern diese Methoden den Status der Anwendung durch Aufrufen der LoadSecondMenu-Unterroutine. Die Statusänderung der Anwendung ist dadurch erkennbar, dass im Menü zwei neue Elemente, Print Preview und Close Workbook, angezeigt werden.

Programmtechnisches Erstellen eines Menüs

Zusätzlich zum Erstellen von Menüs mithilfe von Windows Forms-Designer können Sie eine Windows-Anwendung auch programmtechnisch durch Verwendung des MainMenu-Objekts erstellen. Die folgende Unterroutine verwendet ein MainMenu-Objekt, das sich öffnet, sobald die Anwendung gestartet wird. Dieses enthält lediglich das herkömmliche Menü File mit den Befehlen New, Open und Exit. Der nachfolgende Code verwendet darüber hinaus eine überladene Add-Methode, die Menüelemente erstellt und Ereignishandler mit diesen verknüpft.

Anmerkung Um auf Member des Excel-Objektmodells zu verweisen, müssen Sie einen Verweis auf die Microsoft Excel-Objektbibliothek einrichten, wie im Abschnitt Erstellen eines Menüs zur Entwurfszeit erläutert.

' Create a MainMenu object and a MenuItem object. 
Private mmAppStart as MainMenu 
Private miFile as MenuItem 
Public Sub 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 (AddressOf Me.MenuSelect)) 
 miFile.MenuItems.Add("&New", _ 
  New System.EventHandler (AddressOf Me.MenuSelect)) 
 miFile.MenuItems.Add("&Open",  _ 
  New System.EventHandler (AddressOf Me.MenuSelect)) 
 miFile.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.MenuItems.Add(miFile) 
 ' Set the form's menu to the menu you have just created. 
 Me.Menu = mmAppStart 
End Sub

Programmtechnisches Erstellen von alternativen Menüs

Mit der nachfolgenden Prozedur erstellen Sie eine zweite Instanz einer MainMenu-Komponente mit Menüelementen für einen zweiten Anwendungsstatus. In diesem Beispiel können Sie Befehle zum Anzeigen der Arbeitsmappe in der Vorschau sowie zum Schließen der Arbeitsmappe verfügbar machen, wenn der Benutzer eine Datei geöffnet hat.

' Create the alternate MainMain object. 
Private mmFileLoadedMenu As MainMenu 
Public Sub FileLoadedMenu() 
 mmFileLoadedMenu = New MainMenu() 
 ' Clone the first menu with the CloneMenu method. 
 mmFileLoadedMenu.MenuItems.Add(miFile.CloneMenu()) 
 ' Create two additional menu items related to the  
 ' application state. 
 Dim mnuitemPrintPre As New MenuItem("&Print_Preview", _ 
 New System.EventHandler(AddressOf Me.MenuSelect)) 
 Dim mnuitemClose As New MenuItem("&Close_Workbook", _ 
 New System.EventHandler(AddressOf Me.MenuSelect))  
 ' Add the two new menu items to the MenuItems collection of the  
 ' top-level menu item cloned above, using the Add method to 
 ' specify their order within the collection by their index. 
 mmFileLoadedMenu.MenuItems(0).MenuItems.Add((2), mnuitemPrintPre) 
 mmFileLoadedMenu.MenuItems(0).MenuItems.Add((3), mnuitemClose) 
 ' Assign the newly-created MainMenu object to the form. 
 Me.Menu = mmFileLoadedMenu 
End Sub

Fügen Sie dem Form1-Konstruktor nach dem InitializeComponent-Methodenaufruf eine Codezeile hinzu, um die zuvor erstellte AppStartMenu-Methode aufzurufen:

AppStartMenu()

Erstellen Sie dann innerhalb der Klasse einen Ereignishandler, um jedem der Menüelemente Funktionen hinzuzufügen und die Menu-Eigenschaft des Formulars auf FileLoadedMenu umzustellen. Die Unterroutine fügt Funktionen mithilfe der Select Case..End Select-Anweisung basierend auf dem Wert des Menüelements hinzu, auf das geklickt wurde.

Protected Sub MenuSelect(ByVal sender As Object, _ 
 ByVal e As System.EventArgs) 
 Dim itemClicked As New MenuItem() 
 itemClicked = CType(sender, MenuItem) 
 ' Console.WriteLine("You have selected the item " & _ 
 itemClicked.Text) 
 Select Case itemClicked.Text 
  Case "&New" 
   Dim oWB As Excel.Workbook 
   Dim oSheet As Excel.Worksheet 
   oXL = CreateObject("Excel.Application") 
   oXL.Visible = True 
   ' Get a new blank workbook. 
   oWB = oXL.Workbooks.Add 
   oSheet = oWB.ActiveSheet 
  Case "&Open" 
   Dim oWB As Excel.Workbook 
   Dim oSheet As Excel.Worksheet 
   oXL = CreateObject("Excel.Application") 
   oXL.Visible = True 
   ' Get a new workbook. 
   oWB = oXL.Workbooks.Add 
   oSheet = oWB.ActiveSheet 
   ' Add table headers to each column. 
   oSheet.Cells(1, 1).Value = "First Name" 
   oSheet.Cells(1, 2).Value = "Last Name" 
   ' Populate with sample names. 
   oSheet.Cells(2, 1).Value = "Nancy" 
   oSheet.Cells(2, 2).Value = "Davolio" 
   oSheet.Cells(3, 1).Value = "Janet" 
   oSheet.Cells(3, 2).Value = "Leverling" 
  Case "E&xit" 
   ' Shut down Excel. 
   oXL.Quit() 
   oXL = Nothing 
  Case "&Print_Preview" 
   oXL.ActiveSheet.PrintPreview() 
  Case "&Close_Workbook" 
   Form1.ActiveForm.Close() 
 End Select 
 FileLoadedMenu() 
End Sub

Schlussfolgerung

In dieser Kolumne haben wir uns mit zwei verschiedenen Möglichkeiten beschäftigt, wie Sie Ihren .NET-Anwendungen Menüs hinzufügen können. Eine der beiden Methoden beinhaltete das Erstellen von Menüs zur Entwurfszeit. Bei der anderen Methode wurden die Menüs zur Laufzeit programmtechnisch erstellt. In Abhängigkeit von Ihren Anwendungen können Sie eine oder beide dieser Methoden einsetzen. Die in diesem Artikel beschriebenen Techniken ermöglichen es Ihnen, Ihre .NET-Anwendungen vielseitiger zu gestalten.


© 2012 Microsoft. Alle Rechte vorbehalten. Nutzungsbedingungen | Markenzeichen | Informationen zur Datensicherheit
Page view tracker