C# 将ListBox数据源属性设置为null以更改列表项是否错误?
我发现Items.Clear并不总是在通过数据源填充列表框时清除列表框。将数据源设置为Null允许使用Items.Clear()清除它 这样做是错误的吗?这样做是不是我的想法有点错误 谢谢 下面是我准备用来说明我的问题的代码。它包括一个列表框和三个按钮 如果按此顺序单击按钮,一切正常:C# 将ListBox数据源属性设置为null以更改列表项是否错误?,c#,winforms,listbox,datasource,C#,Winforms,Listbox,Datasource,我发现Items.Clear并不总是在通过数据源填充列表框时清除列表框。将数据源设置为Null允许使用Items.Clear()清除它 这样做是错误的吗?这样做是不是我的想法有点错误 谢谢 下面是我准备用来说明我的问题的代码。它包括一个列表框和三个按钮 如果按此顺序单击按钮,一切正常: 用数组按钮填充列表 用数组按钮填充列表项 使用“数据源”按钮填充列表项 但是,如果您首先单击“使用数据源填充列表项”按钮,则单击其他两个按钮中的任何一个都会导致此错误:“System.Windows.Forms.
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;
}
}
公共部分类表单1:表单
{
公共表格1()
{
初始化组件();
}
私有void btnFillListWithArray_单击(对象发送方,事件参数e)
{
字符串[]myList=新字符串[4];
myList[0]=“一”;
myList[1]=“两个”;
myList[2]=“三”;
myList[3]=“四”;
//listBox1.DataSource=null;如果您的listbox绑定到一个数据源,那么该数据源将成为listbox的“主”。然后您不清除listbox,但需要清除该数据源。
因此,如果列表框绑定到LWORD,则执行LWORD.clear(),列表框将被清除。
这是正确的行为,因为这就是数据绑定的意义所在
如果将数据源设置为null,基本上就是告诉listbox它不再是数据绑定的。当然,作为副作用,它会变为空。
但是,根据具体情况,您可能不希望只清除列表框,但您可能希望同时清除数据源和列表框
假设您想通过GUI清除LWORD,并且LWORD是列表框的源,您按下一个按钮并将数据源设置为null,您会看到列表框变为空,认为LWORD不是空的,但LWORD根本不是空的,然后在这种情况下,这将是一个bug。根据Microsoft的说法,它看起来像是set将数据源设置为Null,然后清除列表是可以接受的
来源:根据Microsoft的说法,您需要将数据源设置为null以清除项目。