C#WinForms ListBox将选择更改为第一项

问题描述 投票:1回答:2

我在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相同的数据源。这似乎导致了此行为。

c# winforms listbox
2个回答
2
投票

我终于找到了问题:我不知道如果我对两个列表框使用相同的数据源,则它们默认情况下会共享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();

0
投票

您可以使用变量保存所选项目

object _selecteditem=null;

并在ListBox click事件中检查它。

prive void ListBox1_Click(object sender,EventArgs e)
{
      if(ListBox1.SelectItem == _selecteditem) return;
      // do ...
}
© www.soinside.com 2019 - 2024. All rights reserved.