【发布时间】:2008-10-31 18:38:57
【问题描述】:
我将一个列表框数据绑定到一个简单的自定义对象集合。接下来,我添加了一个按钮以从对象集合中删除所选项目。问题是当某些项目被删除并且列表框显示垂直滚动条时,滚动条似乎重置到一个新位置,尽管我真正认为正在发生的是控件正在重新绘制。
以下代码示例演示了该问题。将此代码添加到表单中,确保出现垂直滚动条。选择集合中间的一个项目,使滚动条居中,然后按删除按钮。当控件重新绘制时,项目和滚动条位于不同的位置。我希望列表框的行为与非数据绑定项目一样。我最好不使用数据绑定,还是有一个解决方案可以让我保持控件绑定?
谢谢。
public partial class Form1 : Form
{
private BindingList<ItemData> m_bList = new BindingList<ItemData>();
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
for (int i = 0; i < 50; i++)
{
m_bList.Add(new ItemData("Name " + i.ToString(), i));
}
this.listBox1.DisplayMember = "Name";
this.listBox1.DataSource = m_bList;
}
private void btnRemove_Click(object sender, EventArgs e)
{
m_bList.Remove(listBox1.SelectedItem as ItemData);
}
}
public class ItemData
{
public string Name { get; set; }
public int Position { get; set; }
public ItemData(string name, int position)
{
Name = name;
Position = position;
}
}
【问题讨论】: