2009-08-15 5 views
1

Ich habe ein MenuItem, das alle Dateien in einem bestimmten Ordner enthält.C# Kontextmenü, das bei Popup-Ereignis gefüllt wird

Das menuitem auf eigene Popup Ereignis stammen (System.IO.Directory.GetFiles verwenden), aber wenn es zu nahe an der unteren rechten Ecke des Bildschirms (oder so scheint es) ist, wird es höher springen auf dem Bildschirm, während besiedelten sein .

Wenn ich es befülle, bevor das Popup-Ereignis ausgelöst wird, wird der Menüeintrag an der üblichen Position geöffnet.

Ich muss es auf dem Popup-Ereignis auffüllen, um den Inhalt des Ordners auf dem neuesten Stand zu halten.

Warum bewegt sich der Menüeintrag, wenn er im Popup-Ereignis gefüllt ist, und wie kann ich es vermeiden?

+0

Haben Sie dieses Verhalten in einer Vielzahl von Browsern gesehen? – jim

+0

Entschuldigung, ich habe nicht genug angegeben. Es ist C# in Windows-Anwendungen. Das Kontextmenu ist mit einem Tray-Icon verbunden (was bedeutet, dass es die meiste Zeit in der unteren rechten Ecke des Bildschirms ist, was es zu einem lästigen Problem macht). –

+1

Können Sie Beispielcode hinzufügen, um das Problem anzuzeigen? Wenn ich es hier versuche, funktioniert es soweit ich weiß. Während das Kontextmenü ausgefüllt ist, wird keine Bildschirmaktualisierung durchgeführt, und das Menü wird erst angezeigt, wenn der Popup-Handler abgeschlossen ist. – JimG

Antwort

1

Nachdem ich ein wenig darüber nachgedacht habe, bin ich mir nicht sicher, ob das Aktualisieren des Menüs bei Popup-Zeit der beste Ansatz ist. Erstellen Sie das Menü beim Start einmal und verwenden Sie einen FileSystemWatcher (oder einige, wenn es verschiedene Standorte gibt), um Sie über Änderungen zu informieren, und aktualisieren Sie das Menü nach Bedarf.

0

Ich hatte das gleiche Problem mit einem DataGridView.

Ich benutzte Pop-up-Menü, um den Benutzer aus wenigen typischen Eingaben wählen zu lassen, wenn das Gitter gefüllt wird. Und je nachdem, was in der Zelle geklickt wurde, wären die Optionen ein bisschen anders. Ich hatte dieses Kontextmenü springen und blinken. Ich habe versucht, verschiedene Ansätze, was ich schließlich

1. Zurücksetzen des ContextMenu Eigenschaft meiner Datagridview tat, war (ich meine ich diese Eigenschaft nur auf Null gesetzt) ​​

2. das Menü bevöl in CellMouseDown Veranstaltung Datagridview statt der Eröffnungsveranstaltung über das Kontextmenü

3., nachdem es (noch in CellMouseDown) bevölkern, einfach dieses Menü auf diese spezielle Zelle

myDataGridView[column, row].ContextMenuStrip = myPopUpMenu; 

Und das ist die Zuweisung es. Arbeitete gut, ohne unerwünschte visuelle Phänomene;).

Verwandte Themen