Laden...

ConextMenuStrip bei Klick auf ein Unterelement nicht schließen.

Erstellt von danielku15 vor 16 Jahren Letzter Beitrag vor 16 Jahren 1.149 Views
D
danielku15 Themenstarter:in
7 Beiträge seit 2006
vor 16 Jahren
ConextMenuStrip bei Klick auf ein Unterelement nicht schließen.

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: ClosingReason
AppFocusChanged
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

432 Beiträge seit 2005
vor 16 Jahren

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

D
danielku15 Themenstarter:in
7 Beiträge seit 2006
vor 16 Jahren

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

S
30 Beiträge seit 2006
vor 16 Jahren

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.