ContextMenu没有显示,我不知道为什么

时间:2009-08-16 22:17:23

标签: c# .net contextmenu

我正在编写一个C#(.NET 3.5)应用程序,其中包含一个继承自DataGridView的usercontrol。当用户右键单击列标题时,我想显示一个上下文菜单。

我实际上已经在我的应用程序中找到了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 个答案:

答案 0 :(得分:0)

是的,没有足够的信息来重新创建问题,但我可以提供这个,如果你有其他2个表单,问题不在于你继承的代码。问题在于第3种形式。

  

如果你真的想要服用   时间尝试从头开始第4次   看看是否出现相同的错误。校验   所有的事件处理程序。听起来   就像你在表格1和表格上有一个连线2   但不是3。