如何在两个ListBox之间同步选择索引

时间:2015-08-07 23:49:56

标签: c# winforms

我有两个列表框:listBox1,listBox2。

如果我在第一个listBox1中选择项目,则必须在listBox2中自动选择相同索引的项目。 因此,如果我在listbox1中选择项目1,则在listbox2中自动选择项目1,依此类推。

不是:我找到了一些例子,但没有成功。

private void listBoxControl2_SelectedIndexChanged(object sender, EventArgs e) 
{ listBoxControl5.SelectedIndex = listBoxControl2.SelectedIndex; }

修改

我使用SelectedValueChanged事件中This answer中选定的索引代码解决了这个问题。

private void listBoxControl2_SelectedValueChanged(object sender, EventArgs e)
    {
        listBoxControl5.SelectedIndex = listBoxControl2.SelectedIndex;
    }

4 个答案:

答案 0 :(得分:1)

以下是您可能想要探索的示例,尝试将ListBox添加到您的表单(在此示例3列表框中),它应如下所示:

enter image description here

以下是点击其中的项目时选择相同索引的来源:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        InitializeListBoxes();
    }

    private void InitializeListBoxes()
    {
        //Populate listboxes
        listBox1.Items.Add("Apple");
        listBox1.Items.Add("Orange");
        listBox1.Items.Add("Mango");

        listBox2.Items.Add("Milk");
        listBox2.Items.Add("Cheese");
        listBox2.Items.Add("Butter");

        listBox3.Items.Add("Coffee");
        listBox3.Items.Add("Cream");
        listBox3.Items.Add("Sugar");

        //Subscribe to same events
        listBox1.SelectedIndexChanged += listBox_SelectedIndexChanged;
        listBox2.SelectedIndexChanged += listBox_SelectedIndexChanged;
        listBox3.SelectedIndexChanged += listBox_SelectedIndexChanged;
    }

    void listBox_SelectedIndexChanged(object sender, EventArgs e)
    {
        ListBox listBox = (ListBox)sender;
        listBox1.SelectedIndex = listBox.SelectedIndex;
        listBox2.SelectedIndex = listBox.SelectedIndex;
        listBox3.SelectedIndex = listBox.SelectedIndex;
    }
}

InitializeListBoxes您订阅同一事件会触发SelectedIndexChanged事件,并从每个ListBox中选择适当的项目。

答案 1 :(得分:0)

要解决您的问题,您可以使用名为Observer的模式:https://msdn.microsoft.com/en-us/library/ee850490(v=vs.110).aspx

基本上,您必须在要通知的列表框中创建通知程序方法。当您在listBox1中选择一个项目时,您将调用listBox2的通知方法。

答案 2 :(得分:0)

我使用SelectedValueChanged事件中This answer中选定的索引代码解决了这个问题。

private void listBoxControl2_SelectedValueChanged(object sender, EventArgs e)
    {
        listBoxControl5.SelectedIndex = listBoxControl2.SelectedIndex;
    }

答案 3 :(得分:0)

最迅速,最简单的方法可以通过MouseDown事件:

        private void lstBoxes_MouseDown(object sender, MouseEventArgs e)
    {
        ListBox lstBox = (ListBox)sender;
        lstBx1.SelectedIndex = lstBox.SelectedIndex;
        lstBx2.SelectedIndex = lstBox.SelectedIndex;
        lstBx3.SelectedIndex = lstBox.SelectedIndex;
    }