2009-08-16 68 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

相关问题