如何以编程方式选择列表框中的项目?

B. *_*non 7 c# .net-1.1 compact-framework listbox listboxitem

我有一个列表框显示枚举项目.我想在列表框显示/表单打开时选择/突出显示当前值(从数据库中读取).但是这段代码:

lblSelectedPrinter.Text = AppSettings.ReadSettingsVal("beltprinter");
listBoxBeltPrinters.SelectedItem = listBoxBeltPrinters.Items.IndexOf(lblSelectedPrinter.Text);
Run Code Online (Sandbox Code Playgroud)

......不起作用.我在这里看到了一个使用"GetItemAt"的例子(以编程方式在ListBox中选择项目/索引)但是我的简化和古老版本的C#(.NET 1.1,C#2)没有这样的生物.

UPDATE

我认为这会奏效:

string currentPrinter = AppSettings.ReadSettingsVal("beltprinter");
lblSelectedPrinter.Text = currentPrinter;
int currentPrinterIndex = listBoxBeltPrinters.Items.IndexOf(currentPrinter);
listBoxBeltPrinters.SelectedItem = currentPrinterIndex;
Run Code Online (Sandbox Code Playgroud)

...但它也没有(当前打印机显示在标签中,但未选中列表框中的相应条目/值).

jp2*_*ode 7

我看到你已经解决了这个问题,但为什么不尝试这种经过验证的方法呢?

  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;
      }
    }
  }
Run Code Online (Sandbox Code Playgroud)

这样,您知道SelectedIndex一旦文本更改,该值就会设置为-1,如果在您的文本中找到该值ListBox,则会选择该项目.

更好的方法是在Label控件lblSelectedPrinter触发TextChanged事件时编写处理程序.

lblSelectedPrinter.TextChanged += new EventHandler(SelectedPrinter_TextChanged);
Run Code Online (Sandbox Code Playgroud)

然后,创建如上所示的事件处理程序:

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;
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

你已经解决了问题,所以这只是值得思考的问题.