我发现当通过DataSource填充列表框时,Items.Clear并不总是清除列表框。将DataSource设置为Null允许使用Items.Clear()清除它。
这样做是错误的吗?这样做我的想法有点不对劲吗?
感谢。
以下是我准备说明问题的代码。它包括一个列表框和三个按钮。
如果按此顺序单击按钮,一切都有效:
但是,如果您单击"使用DataSource填充列表项"按钮首先,单击其他两个按钮之一会导致此错误:"未处理的类型' System.ArgumentException'发生在System.Windows.Forms.dll"使用"设置DataSource属性时无法修改Items集合。"
评论
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void btnFillListWithArray_Click(object sender, EventArgs e)
{
string[] myList = new string[4];
myList[0] = "One";
myList[1] = "Two";
myList[2] = "Three";
myList[3] = "Four";
//listBox1.DataSource = null; <= required to clear list
listBox1.Items.Clear();
listBox1.Items.AddRange(myList);
}
private void btnFillListItemsWithList_Click(object sender, EventArgs e)
{
List<string> LStrings = new List<string> { "Lorem", "ipsum", "dolor", "sit" };
//listBox1.DataSource = null; <= required to clear list
listBox1.Items.Clear();
listBox1.Items.AddRange(LStrings.ToArray());
}
private void btnFillListItemsWithDataSource_Click(object sender, EventArgs e)
{
List<string> LWords = new List<string> { "Alpha", "Beta", "Gamma", "Delta" };
//listBox1.DataSource = null; <= required to clear list
listBox1.Items.Clear();
listBox1.DataSource = LWords;
}
}
答案 0 :(得分:2)
根据Microsoft的说法,将Datasource设置为Null然后清除列表是可以接受的。
答案 1 :(得分:1)
如果您的列表框绑定到数据源,那么该数据源将成为&#39; master&#39;的列表框。然后,您不清除列表框,但需要清除数据源。 因此,如果列表框绑定到LWords,则执行Lwords.clear()并清除列表框。 这是正确的行为,因为这就是数据绑定的全部内容。
如果将数据源设置为null,则基本上告诉列表框它不再是数据绑定。当然,作为其副作用,它变得空洞。 但根据情况,您可能不希望清除列表框,但您可能希望清除数据源和列表框。
假设您想通过GUI清除LWords,并且LWords是列表框的来源,您按下按钮并将数据源设置为null,您会看到列表框变空,认为LWords不为空,但是LWords根本不是空的,然后在这种情况下就是一个bug。