How can I programmatically select an item in a listbox?
.net-1.1, c#, compact-framework, listbox, listboxitem
Solution
I see you've already solved this, but why not do it the tried and tested way?
lblSelectedPrinter.Text = AppSettings.ReadSettingsVal("beltprinter");
listBoxBeltPrinters.SelectedIndex = -1;
if (!String.IsNullOrEmpty(lblSelectedPrinter.Text)) {
for (int index = 0; index < listBoxBeltPrinters.Items.Count; index++) {
string item = listBoxBeltPrinters.Items[index].ToString();
if (lblSelectedPrinter.Text == item) {
listBoxBeltPrinters.SelectedItem = index;
break;
}
}
}
This way, you know the `SelectedIndex` value is set to -1 as soon as the text changes, and if it is found in your `ListBox`, that item is selected.
Even better would be to write a handler when the Label control `lblSelectedPrinter` fires the `TextChanged` event.
lblSelectedPrinter.TextChanged += new EventHandler(SelectedPrinter_TextChanged);
Then, create that Event Handler like shown above:
private void SelectedPrinter_TextChanged(object sender, EventArgs e) {
listBoxBeltPrinters.SelectedIndex = -1;
if (!String.IsNullOrEmpty(lblSelectedPrinter.Text)) {
for (int index = 0; index < listBoxBeltPrinters.Items.Count; index++) {
string item = listBoxBeltPrinters.Items[index].ToString();
if (lblSelectedPrinter.Text == item) {
listBoxBeltPrinters.SelectedItem = index;
break;
}
}
}
}
You've already solved your problem, so this is just food for thought.
Problem
I have a listbox displaying items from an enum. I want to select/highlight the current value (read from a database) when the listbox displays/the form opens. This code, though: ``` lblSelectedPrinter.Text = AppSettings.ReadSettingsVal("beltprinter"); listBoxBeltPrinters.SelectedItem = listBoxBeltPrinters.Items.IndexOf(lblSelectedPrinter.Text); ``` ...does not work. I saw an example using "GetItemAt" here (Programmatically selecting Items/Indexes in a ListBox) but my stripped down and archaic version of C# (.NET 1.1, C# 2) has no such critter. UPDATE I thought this would work: ``` string currentPrinter = AppSettings.ReadSettingsVal("beltprinter"); lblSelectedPrinter.Text = currentPrinter; int currentPrinterIndex = listBoxBeltPrinters.Items.IndexOf(currentPrinter); listBoxBeltPrinters.SelectedItem = currentPrinterIndex; ``` ...but it, also, does not (the current printer displays in the label, but the corresponding entry/value in the listbox is not selected).