Share via


Exemplarische Vorgehensweise: Erstellen dynamischer Kontextmenüs in Windows Forms mit Hilfe von Visual J#

Sie sparen Zeit und benötigen weniger Code zum Erstellen von Anwendungen, wenn mehrere Steuerelemente ein einzelnes Kontextmenüobjekt gemeinsam nutzen. Mit einem "dynamischen" Kontextmenü, das ausschließlich die für dieses Steuerelement erforderlichen Menüelemente enthält, können Sie die Gesamtzahl der erforderlichen Kontextmenüs für die Steuerelemente in einer Anwendung reduzieren. In der folgenden Vorgehensweise erfahren Sie, wie Sie die Menüelemente für jedes Steuerelement ändern.

Erstellen der Anwendung

In der folgenden schrittweisen Anweisung erstellen Sie eine Windows-Anwendung, die ein Formular mit zwei Steuerelementen besitzt. Wenn Sie zur Laufzeit mit der rechten Maustaste auf eines der Steuerelemente klicken (solange das Steuerelement den Fokus besitzt, d. h. es ausgewählt ist), wird das entsprechende Kontextmenü angezeigt. Das Kontextmenü des RadioButton-Steuerelements enthält zwei Menüelemente, während das Kontextmenü des CheckBox-Steuerelements drei Menüelemente besitzt.

So erstellen Sie ein dynamisches Kontextmenü in einem Windows Form

  1. Erstellen Sie eine neue Windows-Anwendung. Weitere Informationen finden Sie unter Erstellen eines Windows-Anwendungsprojekts.

  2. Ziehen Sie ein CheckBox-Steuerelement und ein RadioButton-Steuerelement von der Toolbox in das Formular.

    Ein Kontextmenü kann zwar von zwei (oder mehr) beliebigen Steuerelementen gemeinsam genutzt werden, es ist jedoch sinnvoll, ein Kontextmenü für Steuerelemente mit ähnlichen Befehlen zu verwenden, da auf diese Weise weniger dynamisches Anzeigen und Ausblenden erforderlich ist.

  3. Doppelklicken Sie in der Toolbox auf die ContextMenu-Komponente, um sie dem Formular hinzuzufügen. Dies ist das gemeinsam genutzte Kontextmenü.

  4. Legen Sie im Eigenschaftenfenster für die ContextMenu-Eigenschaft des CheckBox-Steuerelements und des RadioButton-Steuerelements den Wert contextMenu1 fest.

  5. Wählen Sie im Eigenschaftenfenster für die ThreeState-Eigenschaft des CheckBox-Steuerelements den Wert True aus.

    Hinweis   Sie können das Menüelement und die Einstellung der Eigenschaften ContextMenu und ThreeState auch vollständig in Code generieren. Weitere Informationen finden Sie unter Hinzufügen von Kontextmenüs zu Windows Forms und Festlegen von Eigenschaften für Steuerelemente, Dokumente und Formulare. Einzelheiten zur ThreeState-Eigenschaft finden Sie unter Einführung in das CheckBox-Steuerelement in Windows Forms.

  6. Doppelklicken Sie im Designer auf die ContextMenu-Komponente, um einen Standardhandler für das Popup-Ereignis der Komponente zu erstellen. Einzelheiten finden Sie unter Erstellen von Ereignishandlern im Windows Forms-Designer.

  7. Fügen Sie für folgende Zwecke Code in den Ereignishandler ein:

    • Hinzufügen von zwei Menüelementen, eines für den Checked-Status der Steuerelemente und eines für den Unchecked-Status.
    • Testen mit einer if-Anweisung, ob das CheckBox-Steuerelement SourceControl des Kontextmenüs ist. Fügen Sie basierend darauf dynamisch ein drittes Menüelement für den Indeterminate-Status des Steuerelements ein.

    Das folgende Beispiel zeigt, wie mit der Add-Methode die Text-Eigenschaft des Menüelements festgelegt und der dem Menüelement zugehörige Ereignishandler definiert wird. Informationen zu weiteren Add-Methoden mit anderen Signaturen finden Sie unter Menu.MenuItemCollection.Add-Methode.

    // Visual J#
    private void ContextMenu1_Popup(Object sender, System.EventArgs e)
    {
    // Clear the contents of the context menu.
       contextMenu1.get_MenuItems().Clear();
    
    // MenuItem 1 - Add menu item for the Checked state.
       contextMenu1.get_MenuItems().Add("Checked",new System.EventHandler(this.Checked_OnClick));
    // MenuItem 2 - Add a menu item for the Unchecked state.
       contextMenu1.get_MenuItems().Add("Unchecked",new System.EventHandler(this.Unchecked_OnClick));
    
    // Test which control it is.
    // MenuItem 3 - If it is the CheckBox, add a menu item for the 
    // Indeterminate state.
       if (contextMenu1.get_SourceControl().Equals(checkBox1))
       {
          this.contextMenu1.get_MenuItems().Add("Indeterminate", new System.EventHandler(this.Indeterminate_OnClick));
       }
    }
    
  8. Erstellen Sie einen Ereignishandler für das erste Menüelement. Fügen Sie Code hinzu, der mit dem folgenden vergleichbar ist, um die SourceControl-Eigenschaft des Kontextmenüs zu testen. Legen Sie basierend darauf die Checked-Eigenschaft des RadioButton-Steuerelements oder des CheckBox-Steuerelements fest:

    // Visual J#
    private void Checked_OnClick(Object sender, System.EventArgs e)
    {
       if (contextMenu1.get_SourceControl().Equals( radioButton1))
          radioButton1.set_Checked ( true);
       else if (contextMenu1.get_SourceControl().Equals( checkBox1))
          checkBox1.set_Checked ( true);
    }
    
  9. Erstellen Sie für das zweite Menüelement einen ähnlichen Ereignishandler. Geben Sie Code für den Ereignishandler ein, der etwa wie folgt aussieht:

    // Visual J#
    private void Unchecked_OnClick(Object sender, System.EventArgs e)
    {
       if (contextMenu1.get_SourceControl().Equals(radioButton1))
          radioButton1.set_Checked ( false);
       else if (contextMenu1.get_SourceControl().Equals( checkBox1))
          checkBox1.set_Checked (false);
    }
    
  10. Erstellen Sie für das dritte Menüelement einen ähnlichen Ereignishandler. Geben Sie Code für den Ereignishandler ein, der etwa dem folgenden entspricht. Weisen Sie dem Ereignis den Namen Indeterminate_OnClick zu:

    // Visual J#
    private void Indeterminate_OnClick(Object sender, System.EventArgs e)
    {
       if (contextMenu1.get_SourceControl().Equals( checkBox1))
          checkBox1.set_CheckState ( System.Windows.Forms.CheckState.Indeterminate);
    }
    

    Hinweis   In diesem Beispiel wird die CheckState-Eigenschaft verwendet, um für das CheckBox-Steuerelement den Wert Indeterminate im Indeterminate_OnClick-Ereignishandler festzulegen.

So testen Sie die Anwendung

Führen Sie nun die Anwendung aus, und beobachten Sie das Verhalten, während die Menüelemente des Kontextmenüs dynamisch hinzugefügt und entfernt werden.

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

  2. Klicken Sie mit der rechten Maustaste auf das RadioButton-Steuerelement, um das Kontextmenü anzuzeigen.

    Es gibt zwei Menüelemente, mit denen der Status Checked oder Unchecked für das RadioButton-Steuerelement festgelegt wird.

  3. Klicken Sie mit der rechten Maustaste auf das CheckBox-Steuerelement, um das Kontextmenü anzuzeigen.

    Es gibt drei Menüelemente, mit denen der Status Checked, Unchecked oder Indeterminate für das CheckBox-Steuerelement festgelegt wird.

Siehe auch

Kontextmenüs in Windows Forms | Kopieren von Menüelementen aus Menüs in Kontextmenüs | ContextMenu-Komponente (Windows Forms) | Weitergeben von Anwendungen und Komponenten | Exemplarische Vorgehensweisen für Windows Forms