none
ContextMenuStrip erweitern RRS feed

  • Frage

  • Halllo,

    Meine Frage ist ziemlich einfach, was gibt es denn für Möglichkeiten ein ContextMenuStrip so zu erweitern, dass es noch ein ContextMenuStrip enthält?

    Also praktisch gesehen, wie im Windows Explorer die Methode "Senden an", da ist dann so ein kleiner Pfeil rechts mit dem sich ein weiteres ContextMenuStrip öffnet.

    Ich habe es bisher so versucht, dass ich mit dem MouseEnter Event ein neues Menu erstellen, welches aber noch an der Mausposition erscheint. Die AutoClose von Menu1 habe ich natürlich ausgestellt.


    Folgende Probleme habe ich nun:

    - Wan schließe ich das Menu2? Eigentlich, sobald ich aus Menu2 mit der Maus rausfahre, aber auch wenn ich aus dem MenuItem aus Menu1 rausfahre, kann ich prüfen ob ich mit der maus über einem bestimmten Control bin?

    - Ich kann in der jeweiligen OnMouseEnter Methode nicht auf den eigentlichen ContextStrip zurückgreifen, GetControlByName funktioniert irgendwie nicht.

    - Ist der kleine Pfeil irgendein Zeichen, das man erstellen kann?

    - Geht das ganze vielleicht einfacher??!!


    So, hier mal ein bisschen Code ;)

    //Hier CodeEinstieg
    ContextMenuStrip ct = new ContextMenuStrip();
                    ct.Name = "ct_1";
                    ToolStripMenuItem it3 = new ToolStripMenuItem("Port Prüfen");
                    ct.Items.Add(it3);

            private void OnItem1Enter(object sender, EventArgs e)
            {
                
                Control x = GetControlByName("ct_1");
                ContextMenuStrip ct = new ContextMenuStrip();
                ToolStripMenuItem it = new ToolStripMenuItem("test1");
                
                ct.Items.Add(it);
                it.Click += OnBestellungClick;
                ToolStripMenuItem it2 = new ToolStripMenuItem("test2");
                ct.Items.Add(it2);
                it2.Click += OnKuendigungClick;
                ct.Show(x.Location.X +x.Width, x.Location.Y);
                ct.MouseLeave += OnCloseCT;
            }
            private Control GetControlByName(string strCtrlName)
            {
    
                Control ret = null;
                Control[] childCtrls = this.Controls.Find(strCtrlName, true);
                if (childCtrls.Length > 0)
                    ret = childCtrls[0];
    
                return ret;
            }

    Fehlermeldung: x = null

    mfg Simon



    • Bearbeitet Adun.SG Dienstag, 10. April 2012 11:36
    Dienstag, 10. April 2012 11:34

Antworten

  • Hallo Simon,

    das geht, in dem Du Elemente der DropDownItems Eigenschaft über Add bzw. AddRange hinzufügst, z. B.:

            private ContextMenuStrip CreateContextMenu()
            {
                var menu = new ContextMenuStrip();
    
                menu.Items.Add("1. Item");
    
                var dropDownMenu = new ToolStripMenuItem("2. DropDown Item");
                dropDownMenu.DropDownItems.AddRange(new[]
                {
                    new ToolStripMenuItem("1. Untermenu"),
                    new ToolStripMenuItem("2. Untermenu"),
                    new ToolStripMenuItem("3. Untermenu")
                });
                menu.Items.Add(dropDownMenu);
                menu.Items.Add("3. Item");
                return menu;
            }

    Das Ganze kannst Du auch im Designer machen, wo Du die Eigenschaft unter "Daten" findest.

    Gruß Elmar

    • Als Antwort markiert Adun.SG Dienstag, 10. April 2012 13:38
    Dienstag, 10. April 2012 12:51