0

ある 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');
}
4

2 に答える 2

2

これを試して:

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

また

private void button1_Click(object sender, EventArgs e)
{
    Form1_FormClosing(
        null, 
        new FormClosingEventArgs(CloseReason.UserClosing, false));
}

私の答えがイベントハンドラーの部分をリンクする方法をカバーしている場合でも、この特定の解決策は問題につながります.フォームはクリックボタンを閉じません.
正解は

private void button1_Click(object sender, EventArgs e)
{
    Close();
}
于 2012-08-20T20:21:12.160 に答える
1

イベントの処理と確認の要求は別のものです。

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 イベントも発生します。

于 2012-08-20T20:34:50.417 に答える