Winforms には、AutoCompleteMode が SuggestAppend に設定され、AutoCompleteCustomSource が設定されたテキスト ボックスがあります。ユーザーが文字を入力すると、候補リストが表示されます。このリストの項目をマウスでクリックして選択すると、テキスト ボックスを含むフォームの KeyDown イベントが ENTER キーに対して発生します。
提案されたアイテムをマウスで選択するときに、このイベントを発生させない可能性はありますか?
Winforms には、AutoCompleteMode が SuggestAppend に設定され、AutoCompleteCustomSource が設定されたテキスト ボックスがあります。ユーザーが文字を入力すると、候補リストが表示されます。このリストの項目をマウスでクリックして選択すると、テキスト ボックスを含むフォームの KeyDown イベントが ENTER キーに対して発生します。
提案されたアイテムをマウスで選択するときに、このイベントを発生させない可能性はありますか?
オートコンプリート機能には、最初に設計された用途である 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);
キーダウンキーをキャッチできます:
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
//Do nothing or something
}
}