Mahmoud Elgindy
Mahmoud Elgindy

Reputation: 114

How to sync selection index between two ListBoxes

I have two listboxes: listBox1, listBox2.

If i select the item in first listBox1, item of the same index must be automatically selected in listBox2. So, If i select item 1 in listbox1 then, item 1 selected automatically in listbox2 and so on.

Not: I found some examples but not work.

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

Edit:

I solved it using the selected index code in This answer in SelectedValueChanged Event.

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

Upvotes: 0

Views: 1503

Answers (4)

Emre
Emre

Reputation: 184

Fastest and easiest way can be via MouseDown event:

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

Upvotes: 0

Joel Legaspi Enriquez
Joel Legaspi Enriquez

Reputation: 1236

Here's a sample that you may want to explore more, try to add ListBoxto your form (in this sample 3 listboxes) it should look like the following:

enter image description here

And here's the source that would select the same index whenever you click on an item on it:

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;
    }
}

What happens is on the InitializeListBoxes you subscribe to the same event which would trigger the SelectedIndexChanged event, and select appropriate item from each of the ListBox.

Upvotes: 1

Mahmoud Elgindy
Mahmoud Elgindy

Reputation: 114

I solved it using the selected index code in This answer in SelectedValueChanged Event.

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

Upvotes: 0

chesbo
chesbo

Reputation: 21

to solve your problem, you can use a pattern called Observer: https://msdn.microsoft.com/en-us/library/ee850490(v=vs.110).aspx

Basically, you will have to create a notifier method in the listboxes that you want to notify. When you select an item in listBox1, you will call the notifier method of listBox2.

Upvotes: 0

Related Questions