此代码触发选择更改事件两次。我该怎样预防呢? 目前我使用旗帜或聚焦属性来防止这种情况。但实际的方式是什么?
我在 winfoms
上使用它修改
我的写作错误问题,这是我想问的正确代码
private void frmGuestInfo_Load(object sender, EventArgs e)
{
this.dgvGuestInfo.SelectionChanged -= new System.EventHandler(this.dgvGuestInfo_SelectionChanged);
dgvGuestInfo.DataSource=dsFillControls.Tables["tblName"];
this.dgvGuestInfo.SelectionChanged += new System.EventHandler(this.dgvGuestInfo_SelectionChanged);
}
private void dgvGuestInfo_SelectionChanged(object sender, EventArgs e)
{
//this function is raised twice, i was expecting that this will not be raised
}
答案 0 :(得分:0)
每次设置 DataSource
属性时都会触发事件。
您应该只设置 DataSource
一次。
您可能会两次添加相同的事件处理程序
右键单击dgvGuestInfo_SelectionChanged
,然后单击“查找所有引用”。
另外,检查事件处理程序中的调用堆栈。
答案 1 :(得分:0)
我遇到了同样的问题:有时从SelectionChanged取消注册有效,有时不行。
我在try / finally结构中取消注册/重新注册:
this.SelectionChanged -= ManageSelectionChanged;
try
{
// code that could fire this.SelectionChanged
}
finally
{
this.SelectionChanged += ManageSelectionChanged;
}
我也选择使用私人旗帜,但是......我仍然很好奇。