私は答えを探していましたが、string型の項目を持つリストボックスを使用するときに機能するものがありますが、私のアイテムは、私は、キー(テキスト)で検索、(コントロールは、フォーム上の特定のサイズにする必要があるとして、コンボボックスを使用することはできません)私はリストボックスに入力すると、検索できるようにしたいタイプC#WinForms ListBox ListItemsとしてキー/値ペアを使用したインクリメンタル検索
KeyValuePair<string, ChangeRec>
であります項目。出発点として@Marcel Popescuに感謝します。ここでは、コードの私のバージョンは、(それは当然の文字列としてのkVp項目をキャストすることはできませんとして、唯一それが失敗した線の上にコメントしている)だ:
private string searchString;
private DateTime lastKeyPressTime;
private void lbElementNames_KeyPress(object sender, KeyPressEventArgs e)
{
this.IncrementalSearch(e.KeyChar);
e.Handled = true;
}
private void IncrementalSearch(char ch)
{
if ((DateTime.Now - this.lastKeyPressTime) > new TimeSpan(0, 0, 1))
{
this.searchString = ch.ToString();
}
else
{
this.searchString += ch;
}
this.lastKeyPressTime = DateTime.Now;
//* code falls over HERE *//
var item =
this.lbElementNames.Items.Cast<string>()
.FirstOrDefault(it => it.StartsWith(this.searchString, true, CultureInfo.InvariantCulture));
if (item == null) return;
var index = this.lbElementNames.Items.IndexOf(item);
if (index < 0) return;
this.lbElementNames.SelectedIndex = index;
}
ListBoxをどのように埋めるのですか?そのコードは、ここで働いていないものを理解するために不可欠です。 – Steve
謝罪、私はその情報を含めるのを忘れてしまった。データ(辞書)はコントロールのデータソースにバインドされ、DisplayMemberはKeyに設定され、ValueMemberはValueに設定されます。データはテキストファイルから読み込まれます。項目キーはファイル名であり、項目値はそのファイルのすべての情報を含むオブジェクトです。 – MartinS