我已经制作了一个包含字符串的组合框(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;
有没有办法做我想做的事情?
答案 0 :(得分:1)
我不确定这是不是一个好的界面。操作员正在选择某些东西,当他按下鼠标按钮以点击某些内容时,列表会被更改。您确定这不会导致选择了错误的项目吗?
将此与选择要在文件资源管理器中删除的文件进行比较。您选择要删除的文件,另一个进程更改文件夹的内容,从而导致选择不正确的文件。
如果在鼠标单击期间所选项目无效,将选择什么?如果用户点击,将他的眼睛转移到OK按钮并且没有看到他选择了错误的项目怎么办?您是否考虑过如果操作员使用键盘和箭头键选择组合框中的项目会发生什么?
如果您在选择时执行操作而不是在选择之后并按下确定按钮,则此用户界面尤其危险。
如果您查看其他常见的Windows应用程序,在选择过程中可能会发生变化,您总会看到以下情况:
如果您添加确认按钮并使用以下方案,那么您将不会遇到问题:
所以我建议你通过添加一个确认按钮重新考虑你的用户界面,操作员会感谢你。
答案 1 :(得分:0)
类似的东西:
// 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();
}