21

最近ソフトウェアを使用していると、ESC キーを押すと、行った変更が保持されずにダイアログが閉じてしまうことがよくあります。ダイアログにキャンセル ボタンがある場合でも、必ずしもマウスやタブをキャンセル ボタンに近づけたいとは限らないため、特に気に入っています。これは、「おっと、そんなつもりじゃなかった!」ときれいに言う言い方です。ソフトウェアに。実際、私はこの機能を実装していないソフトウェアに腹を立てています.Winformsのフードの下でまだそれが行われていないとは信じられません-私には直感的に思えます...

Form KeyPress イベントにフックするか、「キャンセル」DialogResult などをシミュレートしようとしました。これについては、いくつかの方法があるようです...

質問は次のとおりです。変更を保存せずにダイアログを閉じるために ESC キーをバインドする最もクリーンな方法は何ですか?

これに経験のある方からの助けは大歓迎です!

4

6 に答える 6

30

CancelButton[キャンセル] ボタンを参照するようにフォームのプロパティを設定します。

于 2009-05-15T13:42:56.947 に答える
11

キャンセル ボタンがない場合にこれを行うには、processcmdkey をオーバーライドできます。

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
  if (keyData == Keys.Escape)
  {
    this.Close();
    return true;
  }
  return base.ProcessCmdKey(ref msg, keyData);
}
于 2011-12-09T03:15:11.937 に答える
6

フォームの CancelButton プロパティをキャンセル ボタンに設定することもできます。

this.CancelButton = this.cancelButton;

Visual Studio では、フォームのプロパティを介してこれを設定でき、コードが Form.Designer.cs ファイルに追加されます。

于 2009-05-15T13:43:28.427 に答える
2

あなたはこれを行うことができます:

button b = new button();
b.click = button_click;
this.cancelbutton = b;


protected void button_click(object sender,eventargs e)
{
    this.close();
}
于 2011-04-30T07:45:34.617 に答える
1

ある程度は開発環境に依存します - .NET に組み込まれている (vb.old にあったように)、フォームには「キャンセル ボタン」プロパティがあります。ユーザーは「ESC」キーを押します。」

「ENTER」キーに対応する「AcceptButton」プロパティがあります。

メモリから、標準のメッセージ ボックスとダイアログ ボックスはデフォルトで上記のロジックに従います。もちろん、ユーザーがやりたいことを積極的に主張しない限り、何かが発生しないようにするメッセージ ボックスのデフォルト ボタンを指定することもできます。 .

于 2009-05-15T13:49:36.697 に答える