Ich habe nach einer Antwort gesucht, und obwohl es eine gibt, die funktioniert, wenn eine Listbox mit Elementen vom Typ String verwendet wird, kann ich nicht herausfinden, wie konvertiert werden soll meine Einzelteile sind vom TypC# WinForms ListBox Inkrementelle Suche mit Schlüssel-/Wertpaaren als ListItems
KeyValuePair<string, ChangeRec>
ich, als ich in der Listbox (nicht ComboBox verwenden, da die Steuerung benötigt werden, um eine bestimmte Größe auf dem Formular), auf der Suche nach dem Schlüssel (Text) geben können, suchen möge Artikel. Danke an @Marcel Popescu für den Startpunkt. Hier ist meine Version des Codes (haben nur über die Linie kommentiert, wo sie versagt, wie es zu Recht nicht ein KVP Artikel als String werfen kann):
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;
}
Wie füllen Sie die ListBox? Dieser Code ist wichtig, um zu verstehen, was hier nicht funktioniert. – Steve
Entschuldigung, ich habe vergessen, diese Informationen aufzunehmen. Die Daten (ein Wörterbuch) sind an die Datenquelle des Steuerelements gebunden, und das DisplayMember-Objekt ist auf "Key" festgelegt, wobei ValueMember auf "Value" festgelegt ist. Die Daten werden aus einer Textdatei gelesen. Der Elementschlüssel ist ein Dateiname und der Elementwert ist ein Objekt, das alle Informationen zu dieser Datei enthält. – MartinS