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