我正在编写一个 C# (.NET 3.5) 应用程序,其用户控件继承自 DataGridView。当用户右键单击列标题时,我想显示一个上下文菜单。
我实际上在我的应用程序中的 2 个表单上找到了这个工作发现。我很难过,因为 ContextMenu 不会显示在第三个表单的同一个控件上。我确实看到 Popup 事件被触发,但我没有看到在屏幕上绘制菜单,并且没有调用任何菜单项事件处理程序。
我完全不知道为什么我的上下文菜单没有被绘制,这让我很生气。
不幸的是,我的代码太复杂了,无法在此处发布所有内容……我将在其中包含构建和显示菜单的简短部分。我不相信问题出在这段代码中,但我不知道它还会在哪里。
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));
}
我非常感谢社区可以提供的任何帮助。我真的希望我只是在这里做一些愚蠢的事情。