16

コードを仮定します:

MessageBox.Show(this, 
       "Would you like the differential girdle spring on the up-end of the grammeters?", 
       "Smi-Boloid Stater Slots", 
       MessageBoxButtons.YesNo, 
       MessageBoxIcon.Warning);

代替テキスト

ユーザーがEscapeを押した場合、メッセージ ボックスを閉じて、Show()メソッドを返すことができDialogResult.Noneます。

関連する質問: MessageBox.Show の右上にある "X" を有効にして、ユーザーが中止できるようにするにはどうすればよいですか?


Windows エクスプローラーの確認ダイアログで Esc キーを押して中止する方法に似ています。

Internet Explorer の確認ダイアログでエスケープを押して中止できるようにする方法と似ています。

Outlook の確認ダイアログで Esc キーを押して中止する方法に似ています。

ユニバースの歴史のすべてのダイアログで、ユーザーがエスケープを押すか、X をクリックして、次のように言うことができるのと似ています。

「あなたが私に何を求めているのか、まったくわかりません。私のコンピューターを壊さないでください。」


Vista UX ガイドラインより

「はい」または「いいえ」の質問に答える場合にのみ、「はい」および「いいえ」ボタンを使用してください。主な指示は、当然のことながら、はいまたはいいえの質問として表現する必要があります。はいまたはいいえの質問に [OK] と [キャンセル] を使用しないでください。

4

6 に答える 6

12

列挙値「MessageBoxButtons.YesNoCancel」で「キャンセル」オプションを有効にする必要があります

これは DialogResult.Cancel を返します

ここに画像の説明を入力

于 2009-02-12T18:35:08.800 に答える
4

これが可能だとは思いませんが、通常はMessageBoxButtonsフラグの 1 つをCancelで指定することです(具体的には、あなたの場合は YesNoCancel)。

本当に必要な場合は、この機能を使用して独自の MessageBox 関数を再作成するのはかなり簡単なはずですが、実際にはCancelが機能します。

于 2009-02-12T18:37:33.393 に答える
2

他の回答に加えて、「キャンセル」ボタンが表示されない限り、ユーザーがエスケープでダイアログを閉じることを許可することはおそらく悪い習慣です。これは、ユーザーが Windows アプリケーションに期待するデフォルトの動作とは異なり、どのアクションが不確実になる可能性があるためです。彼らはエスケープキーを押して取りました。

すでに述べたように、「キャンセル」ボタンを追加すると、目的の効果が自動的に作成されます。

于 2009-02-12T18:36:58.980 に答える
1

MessageBoxButtons.YesNoCancel を含めると、デフォルトで Escape がキャンセルに配線され、Cancel の MessageBoxResult が返されるのではないかと思います。

于 2009-02-12T18:35:51.603 に答える
1

MessageBoxButtons.OkCancel が探しているように聞こえます。質問が Ok/Cancel と一致しないという事実にハングアップしています。

理論的には、同じことを行い、No を Escape キーに関連付ける独自の MessageBox フォームを作成することもできます。これにより、少し余分な作業が必要になります。

別のオプションは、質問を言い換えることです。たとえば、次のようになります。

MessageBox.Show(this, "The following operation will format your computer.\r\nPress Ok to continue, Cancel to abort", "Confirm Format", MessageBoxButtons.OkCancel, MessageBoxIcon.Warning);

ほんの一例ですが、これはおそらくあなたのジレンマに対する最も簡単な解決策です。

于 2009-02-12T19:04:38.853 に答える
1

MessageBox(WinForms と WPF の両方にある) は、再定義するのが最適なコンポーネントの 1 つだと思います。その動作は非常に厳格であるため、あらゆる種類のリファクタリングはほぼ不可能です。要するに、独自のロールを作成します。これにより、Escape を使用してそれを閉じることができ、その他必要なものをすべて作成できます。

CodePlex にはInfoBoxと呼ばれるプロジェクトがあり、役に立つ可能性があります。

于 2009-02-12T18:38:24.657 に答える