刷新组合框并重新选择C#中的最后一项

本文关键字:最后 一项 选择 组合 新选择 刷新 | 更新日期: 2023-09-27 18:19:49

我制作了一个包含字符串的组合框(combobox.Items.Add(string)),每隔几秒钟我就想刷新一次(它是一个客户端列表,因此有些客户端可能会连接/断开连接)。我遇到的问题是,当我刷新列表时,它还会将所选项目更改为null,因此,如果我试图与最后一个选定的客户通信,就会出现问题(这意味着我必须在每次勾选后重新选择他)我的刷新代码是:

prog.comboBox1.Items.Clear();
foreach (string client in data.Split('#'))
{
      prog.comboBox1.Items.Add(client);
}

刷新后,我试图重新选择该项目的代码(不起作用)是:

string previous = prog.comboBox1.GetItemText(prog.comboBox1.SelectedItem);
//Refresh list here (With the code above)
if (prog.comboBox1.Items.Contains(previous))
       prog.comboBox1.Text = previous;

有什么办法做我想做的事吗?

刷新组合框并重新选择C#中的最后一项

我不确定这是否是一个好的接口。操作员正在选择某个内容,当他按下鼠标按钮单击某个内容时,列表发生了更改。你确定这不会导致选择了不正确的项目吗?

将其与在文件资源管理器中选择要删除的文件进行比较。您选择要删除的文件,另一个进程会更改文件夹的内容,从而导致选择了不正确的文件。

如果在鼠标单击过程中所选项目不再有效,将选择什么?如果用户点击,将目光转移到OK按钮,却没有看到他选择了错误的项目,该怎么办?您是否考虑过如果操作员使用键盘和箭头键选择组合框中的项目会发生什么?

如果您在选择时而不是在选择并按下OK按钮后执行操作,则此用户界面尤其危险。

如果你看看其他常见的windows应用程序,在选择过程中可能会发生变化,你总是会看到以下场景:

  • 当可以选择的项目集合变得可见时,系统将确定该集合
  • 当此集合可见时,该集合不会更改
  • 选择集合中的项目不会执行操作
  • 只有在操作员按下OK(或continue/next/anthe)后,才会检查选择的有效性

如果你添加一个确认按钮并使用以下场景,那么你就不会有问题:

  • 打开组合框下拉列表的事件后,添加当前现有项目
  • 操作员选择项目,也可能选择其他项目
  • 确认选择后,您将检查所选的所有项目是否仍然有效,并通过错误提供程序或消息框继续或显示一些错误

因此,我建议您重新考虑您的用户界面,添加一个确认按钮,运营商会为此感谢您。

类似的东西:

// to prevent re-drawing
prog.comboBox1.BeginUpdate();
try {
  // swicth event processing off: 
  // do not pay attention to selected index changing while refresing the combo
  prog.comboBox1.SelectedIndexChanged -= prog.comboBox1_SelectedIndexChanged;
  try {
    prog.comboBox1.Items.Clear();
    // You don't want the foreach loop...
    prog.comboBox1.Items.AddRange(data.Split('#'));
  }
  finally {
    // swicth event processing back on
    prog.comboBox1.SelectedIndexChanged += prog.comboBox1_SelectedIndexChanged;
  }
  // Finally, select the item
  prog.comboBox1.Items.SelectedIndex = ... 
}
finally {
  prog.comboBox1.EndUpdate();
}