J'ai cherché une réponse, et bien qu'il y en ait une qui fonctionne quand j'utilise une listbox avec des éléments de type chaîne, je n'arrive pas à comprendre comment la convertir mes articles sont de typeC# WinForms ListBox Recherche incrémentielle avec des paires clé/valeur comme ListItems
KeyValuePair<string, ChangeRec>
Je veux être en mesure de rechercher que je tape dans la liste (ne peut pas utiliser ComboBox que le contrôle doit être une taille spécifique sur la forme), la recherche par la clé (texte) article. Merci à @Marcel Popescu pour le point de départ. Voici ma version du code (ont commenté seulement au-dessus de la ligne où elle échoue, car il à juste titre ne peut pas lancer un élément de kvp sous forme de chaîne):
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;
}
Comment remplir la ListBox? Ce code est essentiel pour comprendre ce qui ne fonctionne pas ici. – Steve
Excuses, j'ai oublié d'inclure cette information. Les données (un dictionnaire) sont liées à la source de données du contrôle et DisplayMember est défini sur Key, l'élément ValueMember étant défini sur Value. Les données sont lues à partir d'un fichier texte. La clé de l'élément est un nom de fichier et la valeur de l'élément est un objet qui contient toutes les informations sur ce fichier. – MartinS