Was ist der richtige Weg, um dynamisch Menüpunkte für ein Kontextmenü in WinForms zu wählen?

StackOverflow https://stackoverflow.com/questions/103514

  •  01-07-2019
  •  | 
  •  

Frage

Ich versuche, ein Kontextmenü für ein Steuerelement zu machen, die zu einem Hauptmenüpunkt „verbunden“. Es gibt zwei feste Menüpunkte, die immer da und eine beliebige Anzahl von zusätzlichen Menüpunkten, die auf der Speisekarte könnten sein müssen.

Ich habe versucht, das Problem zu lösen, indem eine Klasse-Ebene Bezug auf die festen Menüpunkte und eine Liste der dynamischen Menüpunkte zu halten. Ich Handling sowohl Opening Ereignisse Menüs durch die aktuelle Liste der Elemente löschen, dann die entsprechenden Einträge in das Menü hinzufügen. Dies funktioniert gut für das Hauptmenü, aber das Kontextmenü verhält sich seltsam.

Das Hauptproblem scheint zu sein, dass durch die Zeit Opening angehoben wird, hat das Menü bereits entschieden, welche Elemente es angezeigt wird. Diese Form zeigt:

using System.Collections.Generic;
using System.ComponentModel;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public class DemoForm : Form
    {
        private List _items;

        public DemoForm()
        {
            var contextMenu = new ContextMenuStrip();
            contextMenu.Opening += contextMenu_Opening;

            _items = new List();
            _items.Add(new ToolStripMenuItem("item 1"));
            _items.Add(new ToolStripMenuItem("item 2"));


            this.ContextMenuStrip = contextMenu;
        }

        void contextMenu_Opening(object sender, CancelEventArgs e)
        {
            var menu = sender as ContextMenuStrip;

            if (menu != null)
            {
                foreach (var item in _items)
                {
                    menu.Items.Add(item);
                }
            }
        }
    }
}

Wenn Sie mit der rechten Maustaste auf das Formular zum ersten Mal, wird nichts angezeigt. Das zweite Mal, wird das Menü wie erwartet angezeigt. Gibt es ein anderes Ereignis, das ausgelöst wird, wo ich die Elemente aktualisieren können? Ist es eine schlechte Praxis, um dynamisch Menüpunkte zu wählen?

(. Hinweis: Diese für ein Beispiel, das ich begann jemand machen für die eine solche Funktionalität und ich war neugierig, wie schwierig es ist, wollte, so kann ich Details nicht zur Verfügung stellen, warum dies geschehen könnte diese Person will Hauptmenüpunkt im Kontextmenü auf „link“, und da Menüpunkten kann nur das Kind von einem einzigen Menü, dies eine vernünftige Art und Weise schien so. Jede Alternative Vorschläge für einen Ansatz willkommen zu tun. )

War es hilfreich?

Lösung

Sie können die Einzelteile während des MouseDown- Ereignis der Kontrolle erarbeiten. Überprüfen Sie, ob es die rechte Maustaste zu.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top