刷新组合框,并重新选择C#中的最后一项#
问题描述:
我做了一个包含字符串(comboBox.Items.Add(字符串))的组合框和一次每隔几秒我想刷新它(它是一个客户端列表,因此有些可能连接/ disconnect)。我遇到的问题是,当我刷新列表时,它也将选定的项目更改为空,因此如果我试图与最后选择的客户端进行通信会导致问题(这意味着我必须在选择之后重新选择它每一个刻度) 我刷新代码:刷新组合框,并重新选择C#中的最后一项#
prog.comboBox1.Items.Clear();
foreach (string client in data.Split('#'))
{
prog.comboBox1.Items.Add(client);
}
,我已经试过刷新后rechoose项目(它不工作)的代码是:
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;
有什么办法做我想做的事情?
答
我不确定这是否是一个好的界面。操作员正在选择一些东西,而当他按下鼠标按钮来点击列表被改变时。你确定这不会导致错误的项目被选中?
将此与在文件资源管理器中选择要删除的文件进行比较。您选择要删除的文件,另一个进程更改文件夹的内容,从而导致选择不正确的文件。
如果在鼠标单击选中的项目时无效,该选择什么?如果用户点击,避开他的眼睛到OK按钮并且没有看到他选择了不正确的项目?您是否考虑过如果操作员使用键盘和箭头键选择组合框中的项目会发生什么情况?
如果您在选择时执行操作,而不是选择并按下OK按钮,则此用户界面特别危险。
如果你看看其他常见的Windows应用程序里的东西可能选择过程中改变你总是看到以下场景:
- 可以选择项目的集合变得可见的那一刻,系统确定集合
- 虽然这个系列是可见的,收不改变
- 选择集合中的项目不执行操作
- 操作员按下后唯一确定(或继续/下一首/其他),T检查选择的有效性。
如果添加一个确认按钮,并使用下面的场景,那么你不会有你的问题:
- 一旦打开组合框下拉列表的情况下,您添加现有项目
- 操作员选择该项目,并可能选择其他项目
- 一旦确认选择事件,您将检查所选的所有项目是否仍然有效,并继续或通过错误提供程序或消息框显示某些错误。
因此,我建议您通过添加确认按钮重新考虑您的用户界面,运营商将会为此感谢您。
答
类似的东西:
// 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();
}
你怎么刷新?这个Web应用程序? – Damith
尝试吹动SelectedItem并将其设置回来。如果您设置了“文本”,则会覆盖(随机)当前项目的文本... – Shnugo
但是,如果是这样,我将不得不将前一项保存为对象,并且将无法使用包含属性。 – pystudent