5

Winforms には、AutoCompleteMode が SuggestAppend に設定され、AutoCompleteCustomSource が設定されたテキスト ボックスがあります。ユーザーが文字を入力すると、候補リストが表示されます。このリストの項目をマウスでクリックして選択すると、テキスト ボックスを含むフォームの KeyDown イベントが ENTER キーに対して発生します。

提案されたアイテムをマウスで選択するときに、このイベントを発生させない可能性はありますか?

4

2 に答える 2

7

オートコンプリート機能には、最初に設計された用途である Internet Explorer のアドレス ボックスから継承されたいくつかの癖があります。これには、リスト内の項目をクリックしたときに Enter キーを発行することも含まれます。IE のアドレス ボックスで Enter キーを押すと、入力した URL に移動します。

それについてできることは何もありません。ネイティブ インターフェイス (IAutoComplete2) には、動作方法を構成するためのオプションがほとんどありません。Windows メッセージを偽装して、キーストロークをテキスト ボックスに入力します。これは違いを見分ける方法の 1 つです。実際のキーはダウンしていません。次のように、GetKeyState() をピンボークすることで確認できます。

    private void textBox1_KeyDown(object sender, KeyEventArgs e) {
        if (e.KeyData == Keys.Enter && GetKeyState(Keys.Enter) < 0) {
            Console.WriteLine("Really down");
        }
    }

    [System.Runtime.InteropServices.DllImport("user32.dll")]
    private static extern short GetKeyState(Keys key);
于 2012-08-21T14:16:21.737 に答える
1

キーダウンキーをキャッチできます:

private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Enter)
    {
    //Do nothing or something
    }
}
于 2012-08-21T13:29:55.597 に答える