6

これがばかげた質問であるならすみませんが、私はここで初心者です。

[承認]と[キャンセル]の2つのボタンがある単純なカスタムダイアログがあります。Acceptボタンは、フォームのacceptButtonです。

Accept_Clickイベントでいくつかの検証を行い、ダイアログを閉じることができるかどうかを判断したいのですが、このメソッドを終了するたびに、ダイアログは自動的に閉じて[OK]を返します。

ダイアログが閉じないようにするにはどうすればよいですか?または私は他の方法で何かをしなければなりませんか?

ありがとう

4

4 に答える 4

11

フォームレベルの変数があります(_と呼びますvetoClosing)。acceptボタンのClickイベントで、検証を実行し、それに基づいて変数を設定します。

    private void acceptButton_Click(object sender, EventArgs e)
    {
        // Am I valid
        _vetoClosing = !isValid();
    }

次に、FormClosingイベントで、_vetoClosingがtrueの場合、閉じるをキャンセルします

    private void Form_FormClosing(object sender, FormClosingEventArgs e)
    {
        // Am I allowed to close
        if (_vetoClosing)
        {
            _vetoClosing = false;
            e.Cancel = true;
        }
    }

Enter to Press機能が失われるため、Acceptボタンをオフにするのは最適ではありません。

于 2009-04-24T01:29:35.247 に答える
2

コントロールの変更に応じて検証し、フォーム全体が有効な場合にのみ[承認]ボタンを有効にします。

これにより、ボタンをデフォルトのボタン(AcceptButton)のままにしておくことができますが、これは発生しません。

于 2009-04-24T01:16:38.520 に答える
2

よりクリーンな解決策は、DialogResultをNoneに設定することです。

private void acceptButton_Click(object sender, EventArgs e)
{
    if (!isValid()) {
        this.DialogResult = System.Windows.Forms.DialogResult.None;
    }
}
于 2013-01-03T19:27:22.847 に答える
0

フォームのAcceptButtonまたはCancelButtonはそのボタンに設定されていますか?その場合は、ダイアログを閉じたいときに、設定を解除し、ハンドラーで手動でDialogResultを設定してみてください。

于 2009-04-24T01:15:32.097 に答える