【发布时间】:2010-07-08 10:19:06
【问题描述】:
当我更改列表框的数据源时,所有项目都被清除,当将新数据加载到此列表框时,它保持清晰。 我有另一个 ListBox 是新的,具有相同的刷新代码,但刷新完美。
private void RefreshContacts()
{
this.ListContacts.DataSource = null;
this.ListContacts.DataSource = this.contacts;
this.BoxCountContacts.Text = this.ListContacts.Items.Count.ToString();
}
有人知道如何解决列表框被清除和窃听的问题吗?
这是两个列表框的完整刷新代码
private Contact[] contacts, feed; private Boolean isFeed;
internal ArcFeed()
{
this.InitializeComponent();
this.contacts = this.feed = new Contact[0];
}
private void RefreshForm(Boolean isFeed)
{
if (isFeed)
{
this.RefreshFeed();
}
else
{
this.RefreshContacts();
}
}
private void RefreshContacts()
{
this.ListContacts.DataSource = null;
this.ListContacts.DataSource = this.contacts;
this.BoxCountContacts.Text = this.ListContacts.Items.Count.ToString();
}
private void RefreshFeed()
{
this.ListFeed.DataSource = null;
this.ListFeed.DataSource = this.feed;
this.BoxCountFeed.Text = this.ListFeed.Items.Count.ToString();
}
private void OpenFile()
{
if (this.isFeed)
{
this.BoxFileFeed.Text = this.DialogOpen.FileName;
this.feed = ArcBuzz.Load(this.DialogOpen.FileName);
}
else
{
this.BoxFileContacts.Text = this.DialogOpen.FileName;
this.contacts = ArcBuzz.Load(this.DialogOpen.FileName);
}
this.RefreshForm(this.isFeed);
}
所有代码都已调试并正确运行,我没有看到任何错误,正确的列表框的数据源已设置和更改。
【问题讨论】:
-
你可以试试 ListBox1.Items.Clear(); ?
-
真的是一样的代码吗?甚至
this.ListContacts.DataSource = this.contacts;部分?可能是数据源的问题。另外,在方法的开头使用this.ListContacts.BeginUpdate(),在方法的结尾使用this.ListContacts.EndUpdate()。 -
@Jaroslav Jandek:我尝试了 .BeginUpdate() 和 .EndUpdate() 方法,但没有任何改变。
-
@Serkan Hekimoglu:无法使用 Listbox1.Items.Clear(),因为我设置了数据源且没有手动项。
-
@D. Veloper:那些 Begin/End 方法只是在您用项目填充列表时禁用列表闪烁(使用它们是一个好习惯)。在属性编辑器中检查两个 ListBox 的属性 - 类似的代码对我来说效果很好。
标签: c# winforms arrays listbox datasource