16

[OK] ボタンがクリックされたときに閉じないようにしたいダイアログがありますが、[OK] ボタンの代わりに AcceptButton プロパティが none に設定されていても返されます。閉じないようにする最善の方法は何ですか?

4

5 に答える 5

32

実際、間違ったプロパティを変更しています。AcceptButtonあなたは確かにOKボタンになりたいです. このプロパティは、Windows 用語の既定のボタンを決定します。ENTERキーボードを叩いたときに押すボタンです。変更するAcceptButtonことで、ダイアログへのキーボード インターフェイスを壊すだけです。ボタンが押されたときに何が起こるかに影響を与えることはありません。

ボタンを押してフォームを閉じるかどうかを決定するため、DialogResultボタンのプロパティを設定する必要があります。DialogResult.None次に、ボタンのクリック ハンドラー内で、ボタンの押下に応答する方法を決定する必要があります。ダイアログの検証が成功した場合は、フォームのDialogResultプロパティを設定してダイアログを閉じる必要があると思います。例えば

private void OKbuttonClick(object sender, EventArgs e)
{
    if (this.CanClose())
        this.DialogResult = DialogResult.OK;
}
于 2012-04-26T09:46:30.043 に答える
7

この動作を停止する最善の方法はDialogResult.None、デザイン時に[OK]ボタンのDialogResultプロパティをプロパティウィンドウで変更することです。

また、[OK]ボタンのクリックイベントにすでにコードがある場合は、DialogResultの形式を変更できます。

private void comOK_Click(object sender, EventArgs e)
{
    // your code .....

    // Usually this kind of processing is the consequence of some validation check that failed
    // so probably you want something like this
    if(MyValidationCheck() == false)
    {
        // show a message to the user and then stop the form closing with
        this.DialogResult = DialogResult.None;
    }
}
于 2012-04-26T09:44:30.400 に答える
2

DialogResultボタン自体も削除する必要があります。ボタンのプロパティウィンドウで、に設定しNoneます。

http://msdn.microsoft.com/en-us/library/system.windows.forms.button.dialogresult.aspx

このプロパティのDialogResultがNone以外に設定されていて、親フォームがShowDialogメソッドを介して表示された場合、ボタンをクリックすると、イベントをフックせずに親フォームが閉じます。

明らかに、ボタンは何もしないので、Clickイベントのハンドラーを登録する必要があります。

于 2012-04-26T09:44:28.153 に答える
1

ベスト プラクティスは、ユーザー入力に応答しないのではなく、実際に [OK] ボタンを無効に設定することです。

DialogResult プロパティは、フォームに応じて Ok または Yes に設定する必要があり、AcceptButton も Ok にリンクする必要があります。

私は通常、すべてのダイアログで関数を作成し、ユーザーがデータを操作するたびに呼び出します。

void RefreshControls() { button.Enabled = this.ValidateInput(); }

于 2012-04-27T03:28:28.040 に答える