0
我正在用一個從DataGridView繼承的usercontrol編寫C#(.NET 3.5)應用程序。當用戶右鍵單擊列標題時,我想顯示一個上下文菜單。ContextMenu不顯示,我不知道爲什麼
我已經在我的應用程序中找到了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));
}
我真的很感謝社區可以提供的任何幫助。我真的希望我只是在這裏做一些愚蠢的事情。
你並不需要顯示所有的代碼,但是建立一個簡短而完整的程序,它演示了此問題將很可能幫助你自己來解決它,並且肯定會讓別人幫助更容易。 – 2009-08-16 22:23:28
我知道。但是,項目中有超過30個文件,而有問題的用戶控件是275多行代碼,以及各種數據依賴性,試圖將其降低到再現所需的最低限度,這代表了相當多的工作。我從來沒有聽說過ContextMenu.Show()沒有顯示任何東西。我希望別人有。如果不是的話,我會做一些必要的工作來製作一個裸機。 – 2009-08-16 23:23:12
嘗試對錶單進行差異化(其中控件顯示菜單與其他表單不起作用)。 – shahkalpesh 2009-08-16 23:30:05