Entwickler-Ecke

WinForms - ToolStripMenu schließen


aloneboy - Do 30.10.14 23:36
Titel: ToolStripMenu schließen
Hallo zusammen,

möchte gerne beim öffnen eines Menüs vorher eine Passwordabfrage stellen.
Solle man das Passwort falsch bzw. den Dialog mit abbrechen beenden sollte das Menü sich wieder schließen.


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
 private void einstellungenToolStripMenuItem_DropDownOpened(object sender, EventArgs e)
        {
            InputDialog locked = new InputDialog("gesperrt""Passwort:"""true);
            locked.FormClosed += lockedschließen;
            if (locked.ShowDialog() == DialogResult.OK)
            {
                if (locked.ResultText.ToString() == "experte")
                    einstellungenToolStripMenuItem.ShowDropDown();
                else
                    einstellungenToolStripMenuItem.HideDropDown();

            }
           
        }
    private void lockedschließen(object sender,EventArgs e)
        { einstellungenToolStripMenuItem.HideDropDown();}


Was nicht klappt ist das schließen oder besser das verstecken des Menüs. Es bleibt einfach geöffnet.

Klicke ich jedoch ein Button, wird das Menü geschlossen


C#-Quelltext
1:
2:
3:
4:
5:
  private void button1_Click(object sender, EventArgs e)
        {
            einstellungenToolStripMenuItem.HideDropDown();

        }


Was muss ich machen damit es klappt?

Gruß


Ralf Jansen - Do 30.10.14 23:47

Wieso machst du das am MenuItem und nicht am ToolStrip selbst?
Ein ContextMenu oder ein Menu DropDown hat ein Opening Event mit EventArgs über die man ganz ~offiziell~ das öffnen canceln kann.


aloneboy - Fr 31.10.14 22:20

Es sind zwei Menüs nebeneinander und die Passwortabfrage sollte nur bei einen sein. Kann man es dann unterscheiden oder festlegen bei welchen Menü die Abfrage kommt?


Ralf Jansen - Fr 31.10.14 22:49

Jedes Menü hat seinen eigenen Event ist also völlig egal wie viele du davon hast.


aloneboy - Fr 31.10.14 22:59

Danke, ich hoffe ich finde es. Habe schon die Tage gesucht doch nichts gefunden was mir weiterhilf


aloneboy - Fr 31.10.14 23:47

Hallo,

habe mal nachgesehen, ich habe ein MenuStrip und kein ToolStrip.

habe das ganze auch in ein Opening verschoben, doch ein EventArgs e mit cancel gibt es dort nicht.


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
   private void einstellungenToolStripMenuItem_DropDownOpening(object sender, EventArgs e)
        {
            InputDialog locked = new InputDialog("gesperrt""Passwort:"""true);
            locked.FormClosed += lockedschließen;
            if (locked.ShowDialog() == DialogResult.OK)
            {
                if (locked.ResultText.ToString() == "experte")
                    einstellungenToolStripMenuItem.ShowDropDown();
                else
                   ???
                }
        }


Ralf Jansen - Sa 01.11.14 00:44

Ich hatte dich in einem ContextMenu verortet da machte das für mich zumindest noch halbwegs Sinn. Bei einem Menü in das öffnen einzugreifen ist doch eher ungewöhnlich.
Ich wüßte nicht da es da einen vorgesehen Ort gibt das zu tun. Der Event der mir einfällt der vielleicht früh genug auftritt um dort in das öffnen noch einzugreifen wäre MouseDown. Vielleicht funktioniert da noch ein HideDropDown.


aloneboy - Sa 01.11.14 00:59

Danke,

Ich habe es erstmal mit enabled gelöst, ist zwar nicht so elegant vom Aussehen aber erfüllt seinen Zweck.