Ich schreibe eine C# (.NET 3.5) -App mit einem Benutzersteuerelement, das von DataGridView erbt. Wenn der Benutzer mit der rechten Maustaste auf eine Spaltenüberschrift klickt, möchte ich ein Kontextmenü anzeigen.ContextMenu wird nicht angezeigt und ich weiß nicht warum
Ich habe tatsächlich diese Arbeit finden auf 2 Formularen in meiner App. Ich bin ratlos, weil das ContextMenu nicht auf demselben Steuerelement in einem dritten Formular angezeigt wird. Ich sehe, dass das Popup-Ereignis ausgelöst wird, aber ich sehe nicht, dass das Menü auf dem Bildschirm gezeichnet wird, und keiner der Ereignishandler für Menüelemente wird aufgerufen.
Ich habe absolut keine Ahnung, warum mein Kontextmenü nicht gezeichnet wird, und es treibt mich batty.
Leider ist mein Code zu komplex, um alles hier zu posten ... Ich schließe den kurzen Abschnitt ein, in dem ich das Menü aufbaue und zeige. Ich bin nicht überzeugt, dass das Problem in diesem Code liegt, aber ich weiß nicht wo sonst.
if (hti.RowIndex == -1)
{
ClickedColumnHeader = this.Columns[hti.ColumnIndex];
//Build a context menu and show it.
ContextMenu mnu = new ContextMenu();
mnu.MenuItems.Clear();
MenuItem mnuHide = new MenuItem("Hide");
mnuHide.Click += new EventHandler(mnuHide_Click);
MenuItem mnuRename = new MenuItem("Rename...");
mnuRename.Click += new EventHandler(mnuRename_Click);
MenuItem mnuCurrencyFormat = new MenuItem("Format as Currency");
mnuCurrencyFormat.Checked = false;
if (this.Columns[hti.ColumnIndex].DefaultCellStyle.Format == "c")
{
mnuCurrencyFormat.Checked = true;
}
mnuCurrencyFormat.Click += new EventHandler(mnuCurrencyFormat_Click);
MenuItem mnuSeparator = new MenuItem("-");
MenuItem mnuShow = new MenuItem("Show");
foreach (DataGridViewColumn col in this.Columns)
{
if (col.Visible == false)
{
MenuItem x = new MenuItem(col.HeaderText);
x.Click += new EventHandler(x_Click);
mnuShow.MenuItems.Add(x);
}
}
mnu.MenuItems.Add(mnuHide);
mnu.MenuItems.Add(mnuRename);
mnu.MenuItems.Add(mnuCurrencyFormat);
mnu.MenuItems.Add(mnuSeparator);
mnu.MenuItems.Add(mnuShow);
//for debugging...
mnu.Popup += new EventHandler(mnu_Popup);
mnu.Collapse += new EventHandler(mnu_Collapse);
mnu.Show(this, new System.Drawing.Point(f.X, f.Y));
}
Ich würde wirklich jede Hilfe schätzen, die die Gemeinschaft bieten könnte. Ich hoffe wirklich, dass ich hier nur etwas Dummes mache.
Sie müssen nicht den gesamten Code zeigen, aber den Aufbau einer kurzen, aber vollständige Programm, das das Problem sehr wahrscheinlich würde demonstriert helfen Sie, um es selbst zu lösen, und würde es * definitiv * erleichtern, anderen zu helfen. –
Ich weiß. Aber mit mehr als 30 Dateien im Projekt und der Benutzersteuerung, die das Problem hat, mehr als 275 Codezeilen und alle Arten von Datenabhängigkeiten zu haben, ist es ziemlich mühsam, dies auf das Minimum zu reduzieren, das zum Repro benötigt wird. Ich habe noch nie gehört, dass ContextMenu.Show() nichts zeigt. Ich hoffe, dass jemand anderes hat. Wenn nicht, werde ich die Arbeit machen, die nötig ist, um eine blanke Repro zu entwickeln. –
Versuchen Sie, ein Diff Ihrer Formulare (wo das Steuerelement Menü gegenüber anderen Formular anzeigt, wo es nicht funktioniert). – shahkalpesh