3

非常によく似た 2 つのフォームがありますが、そのうちの 1 つはクリックするAcceptButtonとフォームが閉じ、もう 1 つはフォームが閉じません。どちらも にAcceptButton設定されていbtnAcceptます。

私は最近 2 番目のものを作成しました。最初のものはしばらく前から存在し、他の誰かによって作成されました。

どちらも次の方法で開きます。

using(var form = new SomeDialog(dependency))
{
    form.StartPosition = FormStartPosition.CenterParent;
    form.ShowDialog(this);
}

どちらも、これらの行に沿って受け入れボタンのクリックを処理します。

private void btnAccept_Click(object sender, EventArgs e)
{
  _dependency.DoSomething(userInput);
}

デザイナー ファイル全体を投稿しても、おそらく役に立たないでしょう。そこから示すのに特に役立つものはありますか? StackOverflow で同様の投稿が見つかりませんでした。

発散動作を引き起こしている何が欠けていますか?

4

1 に答える 1

6

AcceptButton プロパティは、Enter キーを押したときに既定のアクションを実装するボタンを選択するだけです。ボタンの周りに太い境界線があり、UI にはっきりと表示されます。しかし、それだけでは十分ではありません。デフォルトのアクションを実装する必要があります。

簡単な方法は、デザイナーでボタンの DialogResult プロパティを設定することです。これは問題ありませんが、イベント ハンドラーがダイアログ コンテンツの検証などの処理を行うと、予期せぬ事態が発生する傾向があります。満足できない場合は、フォームの DialogResult プロパティを None に戻す必要があります。個人的には、フォームの DialogResult を常に Click イベント ハンドラーで明示的に設定することを好みます。これはデバッグ可能なコードです。「機能しない」理由を見てみましょう。

于 2015-08-20T22:31:19.857 に答える