未调用MenuItem Click事件处理程序

时间:2017-08-14 17:30:36

标签: c# .net

我正在构建一个ContextMenu,就像这样

            readinstance = null;
            ContextMenu cMenu = new ContextMenu();
            for (int i = 0; i < instances.Length; i++) {
                string text = String.Format("{0} - {1}", instances[i].Id, instances[i].FormName);
                MenuItem item = new MenuItem(text, new EventHandler(cMenuitem_Click));
                item.Tag = instances[i];
                cMenu.MenuItems.Add(item);
            }
            cMenu.Show((Button)sender, new Point(0, 0));
            cMenu.Dispose();
            if (readinstance == null)
                throw new Exception("Must select some instance");

并且处理程序是

    void cMenuitem_Click(object sender, EventArgs e)
    {
        MenuItem item = (MenuItem)sender;
        readinstance = (FormPrintingStorage)item.Tag;
    }

菜单显示正确,但是当我单击某些选项时,不会调用处理程序,因此readinstance保持为null,并抛出异常。作为旁注,当我单击任何选项时,菜单消失。 我看不出我的代码有什么问题。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

我在回答我自己的问题,因为我尝试了更多方法。 第一个是用ListView和“Ok”按钮替换ContextMenu,但没有好运,因为wait循环需要Thread.Sleep。没有评论。

解决方案是使用空列表视图和Ok按钮实现一个新对话框。一些相关的代码如下。请注意,只有TreeViewItem / s在主窗体和对话框之间移动。

{{1}}

获取结果,主表单可以使用Tag成员执行任何操作。实际上,我在相同的表单中使用相同的对话框用于两个不同的目的。