【发布时间】:2014-06-22 15:58:53
【问题描述】:
我有一个对象,它具有所选列表中的一些属性 - 假设一个可以有 0 到 X 个通信渠道的促销活动。要显示/编辑此信息,我正在使用带有选项 SelectionMode==MultiExtended 的列表框。
但在某些情况下它的行为很奇怪
我选择了 2 个沟通渠道(三个渠道中的第一个和最后一个)进行促销,
我单击第二个频道(以前是唯一未选择的频道)并知道它显示了第一个和第二个频道已被选中(我在列表框 SelectedIndexChanged 事件的开头放置了一个检查 - 它显示SelectedItems.Count==2,虽然我点击了一个没有按住 Ctrl 或 Shift 键的项目)在这种情况下 SelectedIndexChanged 事件被触发两次在所有其他情况下它只被触发一次
只有在我第一次打开此对话框后才会发生这种情况,如果我手动选择频道的第一项和第三项,然后单击第二项 - 然后它可以正常工作
实际问题的屏幕截图
http://screencast.com/t/lVs0e9oau
这就是我将所有可能频道的列表加载到列表框中的方式
foreach (var ct in Promotion_operations.Configuration.PromoCommunicationTypes)
{
KeyValuePair<string, PromotionCommunicationType> nct =
new KeyValuePair<string, PromotionCommunicationType>(ct.Name, ct);
communications.Add(nct);
}
PromotionCommunicationList.DataSource = communications; //Promotion_operations.Configuration.PromoCommunicationTypes;
PromotionCommunicationList.DisplayMember = "Key";
PromotionCommunicationList.ValueMember = "Value";
这是我根据 Promotion 的数据加载选定项目的方式
private void LoadSelectedCommunicationsList(ListBox lstbox, List<PromotionCommunication> communications)
{
lstbox.SelectedItems.Clear();
foreach (var ct in communications)
{
for (int j = 0; j < lstbox.Items.Count; j++)
{
if (ct.CommunicationType.Id == ((KeyValuePair<string, PromotionCommunicationType>)lstbox.Items[j]).Value.Id)
{
lstbox.SelectedItems.Add(lstbox.Items[j]);
}
}
}
}
此行为的原因可能是什么?
单击一个以前未选择的列表会同时选择新选择的项目和列表的第一项?
【问题讨论】:
-
所以您的意思是,例如,您在列表框中有 10 个项目,您选择例如第三个项目,还会选择什么?
-
@terrybozzio 第三个也是第一个将被选中,但是当我第二次重复它时,它会正常工作。实际上它只发生在一个特定的场景中(我描述的那个 - 如果最初选择了第一个和第三个项目并且我手动点击第二个项目 - 结果我选择了第一个和第二个项目)
-
@terrybozzio,在这种情况下,当该第一个项目被自动选择时 - 然后列出了Listbox的SelectedIndexChanged事件两次触发,但是在其他情况下(选择正常工作时)此事件仅一次触发。 >
-
你试过listbox.clearSelected()方法吗?
-
@terrybozzio 我需要一个选项来选择多个值...但我不知道在哪个地方可以使用它?在列表框中单击事件?但是我应该以某种方式只过滤我不尝试多选(不使用 Ctrl、Shift 键)的情况?