オートコンプリートドロップダウンがいくつかの提案とともに表示されるTextBoxを作成したいとします。
もちろん、私は自分のテキストボックスにAutoCompleteCustomSourceを使うことを考えましたが、問題はテキストボックスが入力されたテキストを含まないものをすべて自動的にフィルタするということです。例えばC#カスタムオートコンプリートテキストボックスを作成する
、私は「聞く」と入力した場合、私のアルゴリズムの数字「(後に)聞く」と提案として「AAAに耳を傾ける」、「(今)聞きます」。私がautocompletecustomsourceに入れたら、すべてうまく動作します。しかし、テキストが「今すぐ聞く」になるように「今」と書いたらすぐに、オートコンプリート・カスタムソース内の項目のどれも「今すぐ聞く」から始まらないので、オートプレット・ドロップダウンは空です。
私は次の試みた何を、私はItemsプロパティに私の提案を置くコンボボックス、テキストボックスへの入力を変更してから、ちょうどプログラムでドロップダウンを開くようにしました。ここで問題となるのは、コードからドロップダウンを開くと、最初の項目が自動的に選択され、最初の項目のテキストが入力されたテキストを置き換えるということです。 「(後)聞く」、あなたは「聞く」と入力したときにドロップダウンがアイテムを開き、「(今)聞く」と「AAAに耳を傾ける」:
は、最初の例を想像してみてください。しかし、コンボボックス内のテキストは最初の項目に自動的に変更され、 "listen(now)"になり、何も入力できなくなります。
これは私が現在使用しているコードです:
private void comboBox2_KeyUp(object sender, KeyEventArgs e)
{
string asd = comboBox2.Text;
if (asd.Length < 3)
return;
if (e.KeyCode == Keys.Enter)
{
OpenItem(asd);
return;
}
if (AllToString(comboBox2.Items).Contains(asd))
{
return;
}
DateTime started = DateTime.Now;
System.Threading.Thread tth = new System.Threading.Thread((System.Threading.ThreadStart)delegate()
{
JsonData dat = new JsonData();
//Query autocomplete
...
//End Query
comboBox2.Invoke((MethodInvoker)delegate()
{
if (comboBox2.Tag == null || ((DateTime)comboBox2.Tag) < started)
{
comboBox2.Items.Clear();
comboBox2.Items.AddRange(li.ToArray()); //li is the list of suggestions
comboBox2.Select(comboBox2.Text.Length, 0);
comboBox2.Tag = started;
if (li.Count != 0)
comboBox2.DroppedDown = true;
else
{
comboBox2.Focus();
comboBox2.Select(comboBox2.Text.Length, 0);
}
}
});
});
tth.IsBackground = false; tth.Start();
}
は、だから私の質問は:どのように私は変更せずに、ドロップダウンで、私の提案を置くことができ、テキストやコンボボックスを作成することができます入力されたテキストとフィルタリングなし。私はすべての提案が常に表示されるようにしたい。あなたの助けのための
おかげで、アレックス
テキストボックスを使用して、ユーザー入力によってフィルタリングせずに、常に同じ候補リストを取得してみます。 –