2009-08-16 70 views
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)); 
} 

我真的很感謝社區可以提供的任何幫助。我真的希望我只是在這裏做一些愚蠢的事情。

+1

你並不需要顯示所有的代碼,但是建立一個簡短而完整的程序,它演示了此問題將很可能幫助你自己來解決它,並且肯定會讓別人幫助更容易。 – 2009-08-16 22:23:28

+0

我知道。但是,項目中有超過30個文件,而有問題的用戶控件是275多行代碼,以及各種數據依賴性,試圖將其降低到再現所需的最低限度,這代表了相當多的工作。我從來沒有聽說過ContextMenu.Show()沒有顯示任何東西。我希望別人有。如果不是的話,我會做一些必要的工作來製作一個裸機。 – 2009-08-16 23:23:12

+0

嘗試對錶單進行差異化(其中控件顯示菜單與其他表單不起作用)。 – shahkalpesh 2009-08-16 23:30:05

回答

0

是,沒有足夠的信息來重新創建問題,但我可以提供這個,如果你有它在其他2個窗體上工作,這個問題不是你的繼承代碼。問題在於第三種形式。

如果你真的覺得自己走的是 時間嘗試從頭開始製作第4和 看是否相同錯誤影響了。檢查 所有的事件處理程序。這聽起來像 你有形式1一個有線但不能在3

相關問題