C# 通过传递参数从另一个事件方法调用一个事件方法

C# 通过传递参数从另一个事件方法调用一个事件方法,c#,event-handling,C#,Event Handling,我正在尝试从一个EventHandler方法调用另一个EventHandler方法。例如,我想将注销按钮与表单退出链接,因此我有以下代码: private void FormMain_FormClosing(object sender, FormClosingEventArgs e) { if (MessageBox.Show("Bla, bla?", "Logout", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning) == Dia

我正在尝试从一个EventHandler方法调用另一个EventHandler方法。例如,我想将注销按钮与表单退出链接,因此我有以下代码:

private void FormMain_FormClosing(object sender, FormClosingEventArgs e)
{
    if (MessageBox.Show("Bla, bla?", "Logout", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning) == DialogResult.OK)
    {
        e.Cancel = false;
    }
    else
    {
        e.Cancel = true;
    }
}
我想从这次活动中称之为:

private void btnLogOut_Click(object sender, EventArgs e)
{            
    FormMain_FormClosing(null, 'not sure what goes here');
}
试试这个:

private void btnLogOut_Click(object sender, EventArgs e)
{            
    FormMain_FormClosing(null, null);
}

即使我的回答涉及如何链接事件处理程序部分,这个特殊的解决方案也会导致一个问题:表单不会关闭单击按钮。
正确的解决方案是

private void button1_Click(object sender, EventArgs e)
{
    Close();
}
试试这个:

private void btnLogOut_Click(object sender, EventArgs e)
{            
    FormMain_FormClosing(null, null);
}

即使我的回答涉及如何链接事件处理程序部分,这个特殊的解决方案也会导致一个问题:表单不会关闭单击按钮。
正确的解决方案是

private void button1_Click(object sender, EventArgs e)
{
    Close();
}

处理事件和要求确认是两件独立的事情:

private static bool UserConfirmedToLogout() 
{
    return MessageBox.Show("Bla, bla?", "Logout", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning) == DialogResult.OK;
}

private void FormMain_FormClosing(object sender, FormClosingEventArgs e)
{
    e.Cancel = !UserConfirmedToLogout();
}

private void btnLogOut_Click(object sender, EventArgs e)
{            
    Close();
}

调用Close()时,FormClosing事件也会被激发。

处理事件和请求确认是两件独立的事情:

private static bool UserConfirmedToLogout() 
{
    return MessageBox.Show("Bla, bla?", "Logout", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning) == DialogResult.OK;
}

private void FormMain_FormClosing(object sender, FormClosingEventArgs e)
{
    e.Cancel = !UserConfirmedToLogout();
}

private void btnLogOut_Click(object sender, EventArgs e)
{            
    Close();
}

调用Close()时,也会触发FormClosing事件。

这不会使表单关闭。如果他要从
btnLogOut\u单击
调用
Close()
,那么这也会触发
窗体。Closing
事件。@SuperOli:是的,你是对的。但是OP询问如何将EventHandler链接到另一个。。。我的回答涵盖了这一部分。我将编辑我的回答,这不会使表单关闭。如果他要从
btnLogOut\u单击
调用
Close()
,那么这也会触发
窗体。Closing
事件。@SuperOli:是的,你是对的。但是OP询问如何将EventHandler链接到另一个。。。我的回答涵盖了这一部分。我将编辑我的回答您调用
FormMain\u FormClosing
方法的具体原因是什么?我想不出在什么情况下需要调用此方法。当窗体想要关闭时,会自动调用它,因此您可能应该调用
close()
。您调用
FormMain\u FormClosing
方法的具体原因是什么?我想不出在什么情况下需要调用此方法。当窗体想要关闭时,会自动调用它,因此您可能应该调用
close()
。这个答案最合适,因为它避免了从另一个处理程序调用事件处理程序的错误做法。如果需要从两个处理程序中运行相同的代码,则应将其提取到另一个方法中。此答案通过针对特定问题的干净解决方案绕过此错误做法。此答案最合适,因为它避免了从另一个处理程序调用事件处理程序的错误做法。如果需要从两个处理程序中运行相同的代码,则应将其提取到另一个方法中。这个答案绕过了这个坏习惯,为具体问题提供了一个干净的解决方案。