AcceptButtonが設定されているフォーム上でEnterキーを押しても反応しない
- 題名: AcceptButtonが設定されているフォーム上でEnterキーを押しても反応しない
- 著者: まき
- 日時: 2011/03/03 16:16:36
- ID: 28276
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[1]: AcceptButtonが設定されているフォーム上でEnterキーを押しても反応しない
- 著者: shu
- 日時: 2011/03/03 22:34:36
- ID: 28277
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[2]: AcceptButtonが設定されているフォーム上でEnterキーを押しても反応しない
- 著者: こど。
- 日時: 2011/03/04 9:01:52
- ID: 28279
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[3]: AcceptButtonが設定されているフォーム上でEnterキーを押しても反応しない
- 著者: まき
- 日時: 2011/03/04 10:45:16
- ID: 28280
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[4]: AcceptButtonが設定されているフォーム上でEnterキーを押しても反応しない
- 著者: shu
- 日時: 2011/03/04 11:16:49
- ID: 28281
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[5]: AcceptButtonが設定されているフォーム上でEnterキーを押しても反応しない
- 著者: まき
- 日時: 2011/03/04 11:42:10
- ID: 28282
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[6]: AcceptButtonが設定されているフォーム上でEnterキーを押しても反応しない
- 著者: まき
- 日時: 2011/03/09 11:09:16
- ID: 28298
- この記事の返信元:
- この記事への返信:
- ツリーを表示
分類:[.NET]
2011/03/03(Thu) 16:19:17 編集(投稿者)
System.Windows.Forms.FormのAcceptButtonプロパティにButtonが設定されている場合、
Enterキーを押下するとそのButtonのClickイベントが発生しますが、
これが発生しない場合があり困っています。
これを回避し、Clickイベントが発生するようにするにはどうしたら良いでしょか?
再現する条件は、
Form.AcceptButtonに設定されているボタンの、
直前のタブオーダーのコントロールがValidatingイベントを持っており、
そのコントロールでTabキーを押下してValidatingイベントを発生させ、
イベント内でCancelEventArgs.Cancelにtrueが一度でも設定された場合です。
この場合、対象のボタンにフォーカスが設定されるまでEnterキーでClickイベントが発生することはありません。
具体的な発生方法を示します。
前提条件
-------------->
FormにTextBox(txtInput)とButton(btnOk)を1つずつ配置します。
タブオーダー(TabIndex)をTextBox→Buttonの順に設定します。
(txtInput.TabIndex = 0; btnOk.TabIndex = 1;)
TextBoxのValidatingイベントに以下の条件文を記述します。
private void txtInput_Validating(object sender, CancelEventArgs e)
{
// 例えばですが、空ではないときイベントをキャンセルするという条件にします
if(txtInput.Text != "")
{
e.Cancel = true;
}
}
ButtonのClickイベントにはFormを閉じる処理を記述します。
private void btnOk_Click(object sender, EventArgs e)
{
this.Close();
}
<--------------
操作方法
-------------->
TextBoxにフォーカスを設定し、何も入力せずにEnterキーを押します。
この場合、Formが閉じます。(正常な動きです)
次に、TextBoxにフォーカスを設定し、何かを入力してTabキーを押します。※1
Validatingイベントのe.Cancelにtrueが設定されますので、Buttonにはフォーカは移動しません。
TextBoxに入力した値をすべて消します。(空にします)
そのままEnterキーを押します。
Formが閉じません。
※1でTabキーを押すのではなく、Buttonをマウスクリックするにした場合は、
Formが閉じます。
<--------------
ちなみに、CancelButtonプロパティでのEscキー押下時も同様の現象が発生します。
長文になってしまいましたが、
どうぞ、よろしくお願い致します。