无论如何在Form.Show()
之后执行代码?我正在做的是一个小菜单,在用户点击鼠标右键单击后弹出,如果我使用Form.ShowDialog()
我无法点击该菜单上的任何地方,如果我点击菜单上的任何地方应该是菜单应该消失,只能在Form.Show()
上发生。
Form.Show()
之后我向数据库添加信息,这就是Form.Show()
是唯一适合我情况的原因。
代码:
if (e.Button == MouseButtons.Right)
{
if (Application.OpenForms["frm_Options"] == null)
{
frm_Options ofrm = new frm_Options();
ofrm.StartPosition = FormStartPosition.Manual;
ofrm.SetBounds(MousePosition.X + 5, MousePosition.Y + 5, ofrm.Width, ofrm.Height);
ofrm.ShowDialog();
}
}
}
另一种形式:
{
TreeNode oTreeNode = new TreeNode("New Node");
frm_Test ofrm = (frm_Test)Application.OpenForms["frm_Test"];
//updateTreeView is custom event created on ther main form
ofrm.updateTreeView(false, false, oTreeNode);
this.Close();
}
答案 0 :(得分:1)
考虑到您正在谈论ContextMenu
,意味着只有一个表单可以在单个时刻出现。这意味着如果您可以使用Show()
非阻止呼叫。如果用户单击表单外的任何位置,您可以关闭它,如果它之前已经打开过。如果用户单击表单或其上的任何控件(如果有的话),您可以引发一个事件(主窗口接收的ContextMenuFormControlClicked
种类并执行必要的操作(在您的情况下是DB访问)。
希望这有帮助。
答案 1 :(得分:0)
您可以在调用form.show来完成工作之前启动一个线程