C# Как синхронизировать два Lisbox с MultiSimple в качестве SelectionMode

Как следует из вопроса, у меня есть два списка. Я использую один для получения идентификатора из базы данных, а другой - для отображения соответствующей информации пользователю.

Я использовал это для других таблиц, таких как:

int IDIndex = Listbox1.SelectedIndex;
ListBox2.SelectedIndex = IDIndex;

Как мне это сделать, если в ListBox1 выбрано более одного элемента?

@ Редактировать: я использовал для этого следующий код. Проверьте ответ @Pikoh также

Boolean IndexChanged = false;
int IDIndex = -1;
foreach(int ind in ListBox1.SelectedIndices)
{
    if (!ListBox2.SelectedIndices.Contains(ind)) {
        ListBox2.SetSelected(ind, true);
        //Index Selected: ind
        IDIndex = ind;
        IndexChanged = true;
    }
}
if (!IndexChanged)
{
    foreach (int ind in ListBox2.SelectedIndices)
    {
        if (!ListBox1.SelectedIndices.Contains(ind))
        {
            ListBox2.SetSelected(ind, false);
            //Index Deselected: ind
            IDIndex = ind;
            IndexChanged = true;
        }
    }
}

Это позволяет мне узнать, какой индекс был изменен. Моя программа должна знать это, чтобы проверить базу данных на предмет соответствующей информации.

1 ответ

Решение

Вы можете использовать SelectedIndices коллекция. Затем вы можете сделать что-то вроде:

if (Listbox1.SelectedIndices.Count>0)
{
     IDIndex = Listbox1.SelectedIndices[0];
}

Или же

IDIndex = this.listBox1.SelectedIndices.Cast<int>().First();

Или вы можете зациклить на коллекции. Это зависит от поведения, которое вы хотите. Этот ответ предполагает Winforms Listbox

Редактировать Если вы хотите скопировать выбранные индексы Listbox1 в Listbox2, вы можете сделать что-то вроде этого:

Listbox2.ClearSelected();
foreach (int ind in Listbox1.SelectedIndices)
{
     Listbox2.SetSelected(ind, true);
}
Другие вопросы по тегам