0

奇妙な動作をするダイアログフォームがあります-キャンセルボタンを2回押す必要があります(最初にDialogResult.Noneを返し、この動作の理由を見つけることができません)

1. ダイアログフォームを開くコード

    using (var dlgProcess = new DlgFormProcessMismatches())
        {
            if (dlgProcess.ShowDialog(this) == DialogResult.OK)
            {
                // do stuff
            }
            else if (dlgProcess.ShowDialog(this) == DialogResult.Cancel)
            {
                MessageBox.Show(@"Process was cancelled...");
            }
        }

2. dialogForm には次のものがあります。

1) 「キャンセル」ボタンのプロパティ DialogResult=Cancel を設定します。

2)キャンセルボタンのクリックイベントで、DialogResultを明示的に設定します(ボタンのDialogresult = Cancelを設定するだけで十分なはずなので、これを使用して、または使用せずに試しました)

    this.DialogResult=DialogResult.Cancel

しかし、問題は、最初にキャンセルボタンを押すとDialogResult.Noneが返されるため、dialogFormが再度表示され、もう一度押すとキャンセルボタンがDialogResult.Cancelを返すことです。

何が問題なのですか?何か案は?

4

2 に答える 2

4

コードが間違っています。DialogResult を 2 回表示しています。一度表示して結果を得る必要があります。その上で、何をすべきかを決めることができます。このように変更します

DialogResult result = dlgProcess.ShowDialog(this);
if (result  == DialogResult.OK)
{
      // do stuff
}
else if (result  == DialogResult.Cancel)
{
      MessageBox.Show(@"Process was cancelled...");
}
于 2013-07-28T13:15:13.377 に答える
1

これにより、望ましい結果が得られます.showdialogを2回呼び出しています(これが主な問題です)。代わりに、次のようにします。

            var dlgProcess = new DlgFormProcessMismatches();

            if (dlgProcess.ShowDialog(this) == DialogResult.OK)
            {
                //do stuff.....
            }
            else if (dlgProcess.DialogResult == DialogResult.Cancel)
            {
                MessageBox.Show(@"Process was cancelled...");
            }

問題はキャンセルをクリックしてdialogresult.okとそのfalseをチェックすることで、フォームを再度表示するelseを通過し、2回目にキャンセルをクリックするとelse ifステートメントにキャンセルが返されます。

于 2013-07-28T13:34:48.703 に答える