このモーダルダイアログで機能するためにボタンを2回押す必要があるのはなぜですか?

StackOverflow https://stackoverflow.com/questions/1808336

  •  05-07-2019
  •  | 
  •  

質問

このC#コードがあります:

public partial class Continue : Form
{
    public Continue(string colourName)
    {
        InitializeComponent();
        lblMessage.Text = String.Format("Do you wish to change the colour to {0}", colourName);
    }

    private void btnConfirm_Click(object sender, EventArgs e)
    {
        btnConfirm.DialogResult = DialogResult.OK;
    }

    private void btnCancel_Click(object sender, EventArgs e)
    {
        btnCancel.DialogResult = DialogResult.Cancel;
    }
}

それはうまく機能しますが、ダイアログがポップアップするとき、ボタンを2回クリックして使用する必要があります。理由は誰にもわかりますか?

役に立ちましたか?

解決

クリックハンドラーで btnxxx.DialogResult ではなく this.DialogResult を設定するか、ハンドラーの前にbtnxxx.DialogResultを設定する必要があります。

フォームのDialogResultはClickメソッドが実行される前にボタンに設定されるため、最初にイベントが実行されるとフォームのDialogResultはNoneのままですが、2回目は(now-set)ボタンのDialogResultに設定されます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top