Hi Leute.
Ich habe ein kleines Problem. Ich will bei meinen Symbolleisten ein Kontextmenü anhängen damit der User Elemente in der Symbolleiste aus und einblenden kann. Nun will ich aber dass das Kontextmenü auf bleibt. Das Hauptproblem liegt darin:
Ich versuche über die OnClosing Methode die Eigenschaft ClosingReason abzufragen. Bei Einem Klick auf ein Element 1. Ebene ist dies kein Problem. Da ist der Wert ItemClicked.
Wenn ich jedoch folgende Struktur habe...
+---+---+---+---+--+
| A | B | C | D | >|
+---+---+---+---+--+---------------------------+ +----------------+ +-----+
| Symbole hinzufügen/enfernen >| | Sybmolleiste1 >| | x A |
+------------------------------+ +----------------+ +-----+
| Test | | Anpassen... | | x B |
+------------------------------+ +----------------+ +-----+
| x C |
+-----+
| x D |
+-----+
| E |
+-----+
... passiert folgendes:
Klick auf Test: ClosingReasonItemClicked
Klick auf Anpassen: ClosingReasonAppFocusChanged
Klick auf A,B,C,D oder E: ClosingReason==AppFocusChanged
Jedoch kann ich nicht einfach bei einem AppFocusChanged das Element geöffnet behalten. Ein Flag kann ich auch nicht setzen sodass bei einem Klick auf ein Unterelement das Schließen abgebrochen wird da zuerst das Closing-Event des ContextMenuStrip aufgerufen wird und dann erst das Clicked Event des Items.
Gibts da nicht eine einfache Möglichkeit um das KontextMenü geöffnet zu behalten? Ich hoffe ihr könnt mir helfen.
gruß Daniel
hi daniel,
Jedoch kann ich nicht einfach bei einem AppFocusChanged das Element geöffnet behalten.
Doch.
Du kannst dann in dem einzelnen ItemClick Ereignis das ContextMenu per Codeanweisung schliessen.
Der Default wäre dann also, dass dein Kontextmenü bei AppFocusChanged immer aufbleibt und nur ausgewählte Klickereignisse das Schliessen selbst übernehmen.
gruß
ron
Nur wenn ich dann wirklich ein anderes Programm fokusiere. Bspw. Ich habe das Contextmenü geöffnet und klicke im Hintergrund auf ein Programm, dann bleibt das Contextmenü geöffnet. Da ja eigentlich AppFocusChanged dafür gedacht ist.
Gruß Daniel
Hallo zusammen, ich bin bei dem gleichen Problem wie danielku15 angelangt ...
Ich habe ein verschachteltes Kontextmenü und möchte, dass dieses beim Klick auf ein Menuitem nicht zu geht.
Die Doku empfiehlt dafür ja, das closing Event abzufangen und dort gegebenenfalls den Schliessvorgang zu canceln. Dies funktioniert aber leider nur auf der obersten Ebene des Menüs, da bei allem drunter AppFocusChanged ausgelöst wird.
Ich habe mir also eine private boolsche Variable angelegt, welche mir zeigt ob das Menü wirklich geschlossen wird. Hierzu setze ich diese Variable bei einem Klick auf ein entsprechendes Menüelement auf true und überprüfe diese dann im Closing Event.
Hier ist dann aber das Problem, dass ein e.Cancel = true; das Menü nur bis zur zweiten Ebene offen hält, die dritte auf der ich mich befinde aber schliesst.
Mein nächster Ansatz war, dass ich das Menü einfach wieder öffne. Allerdings ist auch hier die Verschachtelung wieder zum Stolperstein geworden - contextMenu.Show() öffnet nur die erste Ebene, weder in der Doku noch per Google habe ich einen Hinweis gefunden, wie man mehrere Ebenen eines Menüs öffnen kann.
Falls jemand einen Ansatz zu einem der obigen Wege hat, wäre das super!
Grüße,
Shukuyen.