erfahrener Neuling - Mi 20.12.17 11:05
Titel: ToolStripMenuItem.Checked auf ContextMenu nicht übernommen
Hallo Leute,
folgendes:
Ich habe ein ContextMenu, auf dem sich ein ToolStripMenuItem befindet (beides habe ich mit dem Designer erstellt).
Dass ContextMenu rufe ich über
.Show() in einer Event-Methode eines anderen Objekts auf.
Über ein ItemClicked-Event des ContextMenus werden im Code die
Checked-Eigenschaften verschiedener ToolStripMenuItems verändert.
Nach Ablauf dieses Events werden aber alle Änderungen verworfen und kein Item auf dem ContextMenu ist ausgewählt.
Frage: Muss ich beim Event oder beim ContextMenu noch irgendeinen Wert setzen, der das Standard-Verhalten abbricht (vgl.
e.Cancel von anderen Events)
C#-Quelltext
1: 2: 3: 4: 5: 6: 7:
| private void contextMenuStripBsp_ItemClicked(object sender, ToolStripItemClickedEventArgs e) { UncheckAllContextMenuItems(); this.toolStripMenuItemBsp.Checked = true; } |
Gruß Julian
PS: Dasselbe Prinzip funktioniert mit ToolStripMenuItems, die sich in einem MenuStrip befinden.
EDIT: Ich konnte die gewünschte Funktionalität erreichen, indem ich die
Checked-bool-Werte der einzelnen Items im
ItemClicked-Event in einem Array speichere und diese Werte dann in einem
Opening-Event des ContextMenus wieder den einzelnen ToolStripMenuItems (nicht
ContextMenu.Items!) zuweise.
Christian S. - Mi 20.12.17 12:23
Hallo,
also irgendwas ist da aber noch komisch. Ich habe das mal nachgebaut. Ein ContextMenu mit entsprechenden Items, keine weiteren Einstellungen verändert. Ein Button öffnet das Menü und der Klick auf das erste Item soll die anderen beiden anhaken. Das tut es auch und der Status bleibt erhalten, auch wenn das Menü zwischendurch geschlossen war.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| public partial class Form1 : Form { public Form1() { InitializeComponent(); }
private void toolStripMenuItem1_Click(object sender, EventArgs e) { toolStripMenuItem2.Checked = true; toolStripMenuItem3.Checked = true; }
private void button1_Click(object sender, EventArgs e) { contextMenuStrip1.Show(button1, new Point(0, 0)); } } |
Grüße
Christian
erfahrener Neuling - Mi 20.12.17 14:07
Christian S. hat folgendes geschrieben : |
Wie ist denn die CheckOnClick-Eigenschaft der Items bei Dir gesetzt? |
Da hattest du den richtigen Riecher!
Die war bei allen Items auf true gesetzt (weil ich dachte, ansonsten kann man sie gar nicht checken :nut:)
Wenn man bei allen false setzt, funktionierts!