有可能吗?我需要在这里拨打Form1_FormClosing
:
ContextMenu trayMenu = new ContextMenu();
trayMenu.MenuItems.Add("Close", delegate {
Form1_FormClosing(????)
});
我需要它,因为我正在使用_FormClosing事件中的CancelEventArgs:
private void Form1_FormClosing(object sender, CancelEventArgs e)
{
if (th != null && th.ThreadState == System.Threading.ThreadState.Running)
{
if (MessageBox.Show("the process is running, you want stop it?", "app", MessageBoxButtons.OKCancel) == DialogResult.OK)
{
AbortProccess(); }
else
{
e.Cancel = true;
}
}
}
我希望这是明确的,提前谢谢。
答案 0 :(得分:4)
你可以做一些事情。
首先,您可以使用myForm.Close()
关闭表单,因为这会间接调用FormClosing
事件。此外,您可以将FormClosing
事件中的所有内容移动到单独的方法中,而不是在事件本身中。然后,您可以从事件和MenuItem中调用该方法。如果你不想做其中任何一个,你可以尝试使用它作为委托:
//CancelEventArgs can also take a boolean which dictates if
//it should be cancelled
Form1_FormClosing(this, new CancelEventArgs());
答案 1 :(得分:3)
ContextMenu trayMenu = new ContextMenu();
trayMenu.MenuItems.Add("Close", delegate {
this.Close();
});
答案 2 :(得分:3)
这在技术上是可行的,只需调用OnFormClosing()方法即可。但实际上并没有关闭表单,它应该只在表单实际关闭时运行。假装表格在实际关闭时假装关闭会导致失望。
所以只需调用Close()方法。