我在WinForm应用程序中遇到了ListBox的问题。我在选项卡控件中有两个ListBoxes,并且根据第一个(lb1)中的选择,第二个(lb2)的DataSource发生了变化。这是在SelectedValueChanged事件中完成的。
private void listBox_ControlUnits_SelectedValueChanged(object sender, EventArgs e)
{
ControlUnit unit = (sender as ListBox).SelectedItem as ControlUnit;
textBox_ProjectNameTab.Text = unit.ProjectName;
listBox_ControlCircuits.DataSource = null;
listBox_ControlCircuits.DataSource = unit.ControlCircuits;
}
lb1也填充有数据源。
现在,如果我在lb1中选择一个值,则选择会自动跳回到第一项,我不知道为什么。这是某种UI更新问题吗?即使没有SelectedValueChanged事件和与第二个列表框的连接,也会出现此问题。
Short gif of the problem, sorry for the blurriness
如果我多次选择一项,则它会以某种方式起作用(如gif所示。
编辑:我找到了问题,但我不太了解会发生什么。我的标签控件的另一个标签上有另一个listBox。此列表框具有与lb1相同的数据源。这似乎导致了此行为。
我终于找到了问题:我不知道如果我对两个列表框使用相同的数据源,则它们默认情况下会共享BindingContext。我为第二个ListBox创建了一个新的BindingContext,现在选择不再更改。
listBox_allGroups.DataSource = null;
listBox_allGroups.DataSource = x.y;
listBox_allGroups.DisplayMember = "Name";
listBox_ControlUnits.DataSource = null;
listBox_ControlUnits.DataSource = x.y;
listBox_ControlUnits.DisplayMember = "Name";
listBox_ControlUnits.BindingContext = new BindingContext();
您可以使用变量保存所选项目
object _selecteditem=null;
并在ListBox click事件中检查它。
prive void ListBox1_Click(object sender,EventArgs e)
{
if(ListBox1.SelectItem == _selecteditem) return;
// do ...
}