我正在构建一个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,并抛出异常。作为旁注,当我单击任何选项时,菜单消失。 我看不出我的代码有什么问题。任何帮助将不胜感激。
答案 0 :(得分:0)
我在回答我自己的问题,因为我尝试了更多方法。 第一个是用ListView和“Ok”按钮替换ContextMenu,但没有好运,因为wait循环需要Thread.Sleep。没有评论。
解决方案是使用空列表视图和Ok按钮实现一个新对话框。一些相关的代码如下。请注意,只有TreeViewItem / s在主窗体和对话框之间移动。
{{1}}
获取结果,主表单可以使用Tag成员执行任何操作。实际上,我在相同的表单中使用相同的对话框用于两个不同的目的。