10

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

lblSelectedPrinter.Text = AppSettings.ReadSettingsVal("beltprinter");
listBoxBeltPrinters.SelectedItem = listBoxBeltPrinters.Items.IndexOf(lblSelectedPrinter.Text);

...不起作用。我在这里看到了一个使用“GetItemAt”的示例(以编程方式在 ListBox 中选择项目/索引),但我的精简版 C#(.NET 1.1、C# 2)没有这样的生物。

更新

我认为这会起作用:

string currentPrinter = AppSettings.ReadSettingsVal("beltprinter");
lblSelectedPrinter.Text = currentPrinter;
int currentPrinterIndex = listBoxBeltPrinters.Items.IndexOf(currentPrinter);
listBoxBeltPrinters.SelectedItem = currentPrinterIndex;

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

4

8 回答 8

10

我看到你已经解决了这个问题,但为什么不尝试和测试的方式呢?

  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;
      }
    }
  }

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

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

lblSelectedPrinter.TextChanged += new EventHandler(SelectedPrinter_TextChanged);

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

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;
      }
    }
  }
}

你已经解决了你的问题,所以这只是思考的食物。

于 2013-08-03T21:54:30.943 回答
4

这有效:

listBoxBeltPrinters.SetSelected(listBoxBeltPrinters.FindString("beltprinter"), true);
于 2015-08-16T01:25:35.187 回答
2
int i = AppSettings.ReadSettingsVal("beltprinter"); //Save it as an int.
listBoxBeltPrinters.SelectedItem = listBoxBeltPrinters.Items.IndexOf(i);
lblSelectedPrinter.Text = listBoxBeltPrinters.SelectedItem.toString();
于 2013-08-02T16:57:05.553 回答
2

这有效:

string currentPrinter = AppSettings.ReadSettingsVal("beltprinter");
lblSelectedPrinter.Text = currentPrinter;
int currentPrinterIndex = listBoxBeltPrinters.Items.IndexOf(currentPrinter);
listBoxBeltPrinters.SelectedIndex = currentPrinterIndex;

这是显示、读取和写入设置 val 所需的唯一代码:

private void PrinterPickerForm_Load(object sender, System.EventArgs e)
{
    Type type = typeof(PrintUtils.BeltPrinterType);
    foreach (FieldInfo field in type.GetFields(BindingFlags.Static | BindingFlags.Public))
    {
        string display = field.GetValue(null).ToString();
        listBoxBeltPrinters.Items.Add(display);
    }
    string currentPrinter = AppSettings.ReadSettingsVal("beltprinter");
    lblCurrentPrinter.Text = currentPrinter;
    int currentPrinterIndex = listBoxBeltPrinters.Items.IndexOf(currentPrinter);
    listBoxBeltPrinters.SelectedIndex = currentPrinterIndex;
}

private void btnSaveSelectedVal_Click(object sender, System.EventArgs e)
{
    string sel = listBoxBeltPrinters.SelectedItem.ToString();
    if (sel != lblCurrentPrinter.Text)
    {
        AppSettings.WriteSettingsVal("beltPrinter", sel);
    }
}
于 2013-08-02T17:52:38.883 回答
2

你可以试试下面的???它取自您的代码,然后使用 FindString

string currentPrinter = AppSettings.ReadSettingsVal("beltprinter");
lblSelectedPrinter.Text = currentPrinter;
int index = listBoxBeltPrinters.FindString(lblSelectedPrinter.Text);
listBoxBeltPrinters.SelectedIndex = index;
于 2013-08-02T18:39:38.353 回答
2

你需要它是一个整数。您可以使用 int.Parse to Convert 将其从字符串转换为 int。

listBoxBeltPrinters.SelectedItem = listBoxBeltPrinters.Items.IndexOf(int.Parse(System.Configuration.ConfigurationSettings.AppSettings.Get("beltprinter")));
lblSelectedPrinter.Text = listBoxBeltPrinters.SelectedItem.toString();
于 2013-08-02T17:00:06.623 回答
2

listBoxObject.SetSelected()和的组合listBoxObject.FindString()是一个优雅的解决方案。它也适用于我。

于 2018-01-09T14:24:25.353 回答
1
lblSelectedPrinter.Text = AppSettings.ReadSettingsVal("beltprinter");

listBoxBeltPrinters.SelectedItem = listBoxBeltPrinters.Items.FindByText(lblSelectedPrinter.Text);

按价值:

listBoxBeltPrinters.SelectedItem = listBoxBeltPrinters.Items.FindByValue(1);
于 2013-08-02T17:05:18.410 回答