C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: AutoCompleteMode と KeyPress


(過去ログ 70 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■40851 / inTopicNo.1)  AutoCompleteMode と KeyPress
  
□投稿者/ kai (1回)-(2009/09/04(Fri) 14:17:07)

分類:[.NET 全般] 

はじめまして。お世話になります。

- Visual C# 2008 Express
- Windows フォームアプリケーション
- .NET CLR 3.5

コンボボックス (System.Windows.Forms.ComboBox) を貼り付け、KeyPress イベントハンドラを設定しました。
KeyPress イベントで、Enter キーかどうかを判定し、Enter キーならば次のコントロールにフォーカスします。

ところが、ComboBox の AutoCompleteMode プロパティの値によって、Enter キー時の KeyPress イベントが
発生したり、しなかったりします。

AutoCompleteMode が、

1. None ... Enter キーで KeyPress イベントが発生。
2. Suggest ... Enter キーで KeyPress イベントは発生しない。
3. Append ... Enter キーで KeyPress イベントは発生しない。
4. SuggestAppend ... Enter キーで KeyPress イベントは発生しない。

None にしたときだけは、Enter キーでもイベントが発生します。それ以外はだめでした。
できれば SuggestAppend を使いたいです。

おそらくコンボボックスの仕様なのだろうと思いますが、解決策はないものでしょうか…!?
恐れ入りますが、よろしくお願いいたします。
引用返信 編集キー/
■40853 / inTopicNo.2)  Re[1]: AutoCompleteMode と KeyPress
□投稿者/ もりお (64回)-(2009/09/04(Fri) 14:30:18)
No40851 (kai さん) に返信
KeyDown イベントもしくは KeyUp イベントを利用されてみてはいかがでしょうか。
引用返信 編集キー/
■40857 / inTopicNo.3)  Re[2]: AutoCompleteMode と KeyPress
□投稿者/ kai (2回)-(2009/09/04(Fri) 15:03:12)
もりおさん、ありがとうございます。

KeyDown と KeyUp を試してみました。

KeyDown イベントで KeyPress と同じ内容のコードを記述しました。
しかし KeyDown でおこなうと、Enter キーを押したときにビープ音が鳴ります。

KeyPress ですと、e.Handled = true; を最後に記述しますと、ビープ音が消せます。
KeyDown ですと、e.Handled = true; としても、ビープ音が出てしまいます。
KeyUp も KeyDown と同様の結果でした。

どうやらビープ音を消せるのは KeyPress だけのようでした。

Σ(゚Д゚;) はっ・・・!? いいこと思いついたかも・・・


ビープ音を消す処理 (e.Handled = true) だけを KeyPress でおこない、
フォーカスを移す処理を KeyDown でやったらどうなるか、試してみました。

すると解決しました!

KeyPress と KeyDown のふたつのイベントハンドラを設定する必要はありますが、
AutoCompleteMode が SuggestAppend でも、ビープ音なしで次のコントロールに
フォーカスします。

以下、記述したコードです。

private void comboBox1_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Enter)
    {
        // Enter キーのとき、次のコントロールへフォーカス。
        Control control = (Control)sender;
        Form form = (Form)control.TopLevelControl;
        form.SelectNextControl(control, true, true, true, true);
    }
}

private void comboBox1_KeyPress(object sender, KeyPressEventArgs e)
{
    // Enter キーのとき、ビープ音を消すため、e.Handled を true に設定。
    if (e.KeyChar == (char)Keys.Enter)
    {
        e.Handled = true;
    }
}

助かりました。大変ありがとうございました。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -