Перемещение элементов между двумя ListBoxes в C#
Один из способов позволить пользователю выбрать элементы из списка - использовать ListBox или CheckedListBox. Пользователь может щелкнуть, Ctrl + Click, Shift + Click и другие комбинации клавиатуры и мыши для выбора некоторых элементов в списке.
Другим методом является использование кнопок, позволяющих перемещать элементы между двумя ListBox es. Один ListBox содержит элементы, которые не выбраны, а другие содержат те, которые есть.
Выберите элемент в любом списке, и программа включит соответствующие кнопки. Например, если вы выберите элемент в левом списке, программа включает & gt; чтобы переместить элемент в правый список. Используйте & lt; и & gt; & gt; & gt; & gt; кнопки для перемещения всех элементов из одного списка в другой.
Программа использует метод MoveSelectedItems, показанный ниже, для перемещения элементов из одного ListBox в другой.
// Переместить выбранные элементы из одного списка в другой. private void MoveSelectedItems(ListBox lstFrom, ListBox lstTo) { while (lstFrom.SelectedItems.Count > 0) { string item = (string)lstFrom.SelectedItems[0]; lstTo.Items.Add(item); lstFrom.Items.Remove(item); } SetButtonsEditable(); }
Пока источник ListBox имеет элементы, выбранные, код добавляет первый выбранный элемент в пункт назначения ListBox, а затем удаляет его из источника ListBox tt >. Цикл продолжается до тех пор, пока все выбранные элементы не будут удалены из первого ListBox.
Следующий код показывает, как программа использует этот метод для перемещения элементов, когда пользователь нажимает кнопку & lt; и & gt; кнопки.
// Переместить выбранные элементы в lstSelected. private void btnSelect_Click(object sender, EventArgs e) { MoveSelectedItems(lstUnselected, lstSelected); } // Перемещение выбранных элементов в lstUnselected. private void btnDeselect_Click(object sender, EventArgs e) { MoveSelectedItems(lstSelected, lstUnselected); }
Ниже показан метод MoveAllItems, который перемещает все элементы из одного ListBox в другой.
// Перемещение всех элементов из одного ListBox в другое. private void MoveAllItems(ListBox lstFrom, ListBox lstTo) { lstTo.Items.AddRange(lstFrom.Items); lstFrom.Items.Clear(); SetButtonsEditable(); }
Этот код использует метод AddBange ListBox для быстрого добавления всех элементов списка источников в список адресатов. Затем он очищает источник ListBox.
Следующий код показывает, как программа перемещает элементы, когда пользователь нажимает кнопку & lt; и & gt; & gt; & gt; & gt; кнопки.
// Переместить все элементы в lstSelected. private void btnSelectAll_Click(object sender, EventArgs e) { MoveAllItems(lstUnselected, lstSelected); } // Переместите все элементы в lstUnselected. private void btnDeselectAll_Click(object sender, EventArgs e) { MoveAllItems(lstSelected, lstUnselected); }
Последним интересным фрагментом кода является следующий метод SetButtonsEditable.
// Включить и отключить кнопки. private void SetButtonsEditable() { btnSelect.Enabled = (lstUnselected.SelectedItems.Count > 0); btnSelectAll.Enabled = (lstUnselected.Items.Count > 0); btnDeselect.Enabled = (lstSelected.SelectedItems.Count > 0); btnDeselectAll.Enabled = (lstSelected.Items.Count > 0); }
Этот метод включает или отключает & lt; и & gt; в зависимости от того, выбраны ли элементы в соответствующих списках. Он включает и отключает & lt; & gt; & gt; & gt; & gt; & gt; в зависимости от того, пусты ли соответствующие списки.