Прямо сейчас у меня есть 3 RichTextBox (ов) с текстом в них. Я беру этот текст из этих блоков и разбиваю каждую строку и добавляю каждую отдельную строку в соответствующий ListBox. Вот мой код для этого:
private void listFormatHelper()
{
// Splits the lines in the rich text boxes
var listOneLines = placementOneRichTextBox.Text.Split('\n');
var listTwoLines = placementTwoRichTextBox.Text.Split('\n');
var listUserLines = userDefinedRichTextBox.Text.Split('\n');
// Resest the text in the listboxes
placementOneListBox.ResetText();
placementTwoListBox.ResetText();
userDefinedListBox.ResetText();
// Set the selection mode to multiple and extended.
placementOneListBox.SelectionMode = SelectionMode.MultiExtended;
placementTwoListBox.SelectionMode = SelectionMode.MultiExtended;
userDefinedListBox.SelectionMode = SelectionMode.MultiExtended;
// Shutdown the painting of the ListBox as items are added.
placementOneListBox.BeginUpdate();
placementTwoListBox.BeginUpdate();
userDefinedListBox.BeginUpdate();
// Display the items in the listbox.
placementOneListBox.DataSource = listOneLines;
placementTwoListBox.DataSource = listTwoLines;
userDefinedListBox.DataSource = listUserLines;
// Allow the ListBox to repaint and display the new items.
placementOneListBox.EndUpdate();
placementTwoListBox.EndUpdate();
userDefinedListBox.EndUpdate();
}
После приведенного выше кода каждый ListBox содержит указанные данные в отдельных строках. Однако я пытаюсь добавить кнопки, которые при нажатии перемещают выбранный элемент списка в указанный список.
Визуальный макет списков:
placementOneListBox userDefinedListBox placementTwoListBox
| | | | | |
| | | | | |
| | | | | |
| | | | | |
|_________________| |_________________| |_________________|
Итак, я пытаюсь сделать так, чтобы у меня была кнопка с надписью «двигаться вправо» или «двигаться влево», которая берет выбранный в данный момент элемент (предпочтительно items для множественного выбора) и перемещает его либо в влево или вправо ListBox. Однако для размещения OneListBox кнопка «переместить влево» не будет работать, а для размещения с двумя списками кнопка «переместить вправо» не будет работать. Я попробовал этот способ ниже (который не работал):
private void placementOneMoveRightButton_Click(object sender, EventArgs e)
{
var currentItemText = placementOneListBox.SelectedValue.ToString();
var currentItemIndex = placementOneListBox.SelectedIndex;
userDefinedListBox.Items.Add(currentItemText);
placementOneListBox.Items.Remove(currentItemIndex);
placementOneListBox.Items.RemoveAt(placementOneListBox.Items.IndexOf(placementOneListBox.SelectedItem));
}
Я тоже попробовал этот способ (который тоже не работал):
private void placementOneMoveRightButton_Click(object sender, EventArgs e)
{
string str;
str = placementOneListBox.SelectedItems.ToString();
placementOneListBox.Items.Remove(placementOneListBox.SelectedItems);
userDefinedListBox.Items.Add(str);
}
ПРИЧИНА, ПОЧЕМУ ОНИ НЕ РАБОТАЮТ :
Всякий раз, когда я запускаю программу и нажимаю кнопку «переместить вправо» (для любого из приведенных выше случаев кода), я получаю следующую ошибку:
"Items collection cannot be modified when the DataSource property is set."
ВОПРОСЫ
- Кто-нибудь знает, что я делаю не так в этом?
- Может кто-нибудь показать / объяснить, что происходит со «свойством DataSource» и как я могу обойти это?