gpt4 book ai didi

winforms - C# - 使用列表框添加/删除

转载 作者:行者123 更新时间:2023-12-01 08:13:50 25 4
gpt4 key购买 nike

现在我有 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 都在不同的行中包含了指定的数据。但是,我想要做的是添加按钮按钮,当单击时将选定的列表项 move 到指定的列表框。


列表框的视觉布局:

placementOneListBox                userDefinedListBox                placementTwoListBox
| | | | | |
| | | | | |
| | | | | |
| | | | | |
|_________________| |_________________| |_________________|

所以,我想做的是有一个按钮,上面写着“向右 move ”或“向左 move ”,它将当前选定的项目(最好是 items 用于多选)并将其 move 到左侧或右侧 ListBox。但是,对于placementOneListBox,“向左 move ”按钮将不起作用,对于placementTwoListBox,“向右 move ”按钮将不起作用。我在下面尝试了这种方式(没有用):

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

他们不工作的原因:

每当我运行程序并单击“向右 move ”按钮(对于上述任一代码案例)时,都会出现以下错误:

"Items collection cannot be modified when the DataSource property is set."

问题

  • 有谁知道我在这方面做错了什么?
  • 有人可以展示/解释“DataSource 属性”发生了什么以及如何解决它吗?

最佳答案

您正在尝试修改绑定(bind)到列表框的数据集。您需要做的是重新创建数据集,然后将该新数据集绑定(bind)到列表框。

对不起,科尔顿,上类开会了。

我不确定您使用的是哪种数据,但这里有一个删除名称并将名称添加到 ListBox 的示例:

private class Names
{
public string Name { get; set; }

public Names(string name)
{
Name = name;
}
}

private void Form1_Load(object sender, EventArgs e) // Form Load Event
{
List<Names> names = new List<Names>();

names.Add(new Names("John"));
names.Add(new Names("Suzy"));
names.Add(new Names("Mary"));
names.Add(new Names("Steve"));

listBox1.DataSource = names;
listBox1.DisplayMember = "Name";
listBox1.ValueMember = "Name";
}

private void button1_Click(object sender, EventArgs e)
{
List<Names> names = new List<Names>();
foreach (var item in listBox1.Items)
{
Names name = (Names)item;
if (name.Name.Equals("Mary")) // Remove Mary
continue;

names.Add(name);
}

names.Add(new Names("Joe")); // Add Joe

listBox1.DataSource = names;
listBox1.DisplayMember = "Name";
listBox1.ValueMember = "Name";
}

所以我正在做的是在表单加载事件中,我正在用新名称填充我的列表框并将数据源设置为我的列表对象。单击该按钮时,我正在创建一个新列表并使用相同的名称填充,但可怜的 Mary 除外。她不在名单之列。然后我将 Joe 添加到列表中,然后再次设置数据源。重要的是,一旦将数据源绑定(bind)到列表框,就不能以任何方式修改该数据源。您必须创建一个新数据源,然后重新绑定(bind)到新源。这现在更有意义了吗?

关于winforms - C# - 使用列表框添加/删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6681642/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com