2012-05-17 7 views
6

C#のWinFormsのを許可しないオートコンプリートコンボボックスを持って、私はコンボボックスに入力するときに、今SuggestAppendは、カスタムテキスト

を、それをその項目のリストから項目を示唆している。良い。しかし、問題は、私が欲しいものをタイプすることができたくないということです。リストにある有効なアイテムからタイプできるようにしたいだけです。この部分はどのように修正できますか?

ありがとうございました。

答えて

5

あなたは自分の価値観(手動またはデータバインディングを介した)とアイテムリストを移入する必要があり、その後、DropDownListにDropDownStyleを設定すると思います。

コンボボックスはテキストボックスのようには見えませんが、フォーカスがあるときは、それを入力するとアイテムリストから最もよく一致するものが自動的に選択されます。

(それはカスタムテキストを許可しないようにコンボボックスを設定するための推奨方法です。)

代わりに、あなたは、スタイルがドロップダウンになりたいコントロールのKeyPressイベントをキャプチャし、簡単なチェックを行いたい場合コントロールのテキストにe.KeyCharを加え、リストに見つからない場合はe.Handled = Trueと設定します。これにより、リストに含まれていない単語が表示されるすべてのキー押下がブロックされます。

+1

ありがとうございますが、動作しません。はい、それは私たちが好きなものを入力するのを防ぐが、それはまた、オートコンプリートを破る。それでも入力することはできますが、リスト全体が表示され、フィルタリングされません。 – Bohn

+0

別の解決策を追加しました。 – MCattle

+0

良いトリックは、今それを試してみます。 – Bohn

0

コンボボックスコントロールは、これを直接サポートしていません。

ハンドラを作成して、リストの項目が入力されたことを確認し、そうでない場合はユーザーに確認する必要があります。

0

これは自動完了に似ていませんが、DropDownStyleをDropDownListに設定すると、Itemsコレクション内のエントリのみが許可されます。しかし、このモードのデフォルトの動作は、あなたが入力したすべての文字が、その文字で始まる最初の一致にジャンプすることです。そのため、最初の文字を超える文字を続けて入力できるようにするには、AutoCompleteSourceをListItemsに設定し、AutoCompleteModeをAppendに設定します。

0

その他のオプションはTextChangedまたはTextUpdatedイベントに登録されている可能性があります。すでに入力されたテキストが条件に合わない場合は、適切に変更してください。

1

これは、この動作するコンボボックスの文字列と一致します。

int index = combobox1.FindString(combobox1.Text); 
    if (index < 0) 
    { 
    MessageBox.Show("Invalid Record"); 
    combobox1.Focus(); 
    return; 
    } 
関連する問題