如何使用控件(例如按钮)从表单中调用事件?

时间:2011-12-24 23:15:32

标签: c# .net winforms events

有可能吗?我需要在这里拨打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;
        }
    }
}

我希望这是明确的,提前谢谢。

3 个答案:

答案 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()方法。