这是我的项目:
在项目中创建新表单。然后创建两个按钮和一个bindingsource。
for button1编写此代码:
private void button1_Click(object sender, EventArgs e)
{
List<int> lst = new List<int>();
lst.Add(1);
lst.Add(3);
lst.Add(3);
this.bindingSource1.DataSource = lst;
}
for button2编写此代码:
private void button2_Click(object sender, EventArgs e)
{
this.bindingSource1.DataSource = null;
}
然后为bindingsource添加一个PositionChanged事件并编写以下代码:
private void bindingSource1_PositionChanged(object sender, EventArgs e)
{
MessageBox.Show("hi");
}
运行应用程序并按下按钮1。在button1中,我们将DataSource
设置为列表,并正常触发PositionChanged
。好的。
然后按下按钮2。我们只需将DataSource
设置为null。但它显示了两条消息。您会看到PositionChanged
事件被触发两次。
如果你也写this.bindingSource1.Clear();
,也会发生这种情况。
为什么会这样?
答案 0 :(得分:0)
“为什么”是通过检查BindingSource类的源代码。
它看起来像清除或将DataSource设置为null进行多次调用以引发PositionChanged事件。要在代码中避免使用它,只需在清除DataSource之前取消挂钩事件,然后重新连接事件:
bindingSource1.PositionChanged -= bindingSource1_PositionChanged;
bindingSource1.DataSource = null;
bindingSource1.PositionChanged += bindingSource1_PositionChanged;