我正在使用 DataGridView,并使用该CellValueChanged
事件。
当我通过代码更改单元格值时,我不希望触发此事件。但是,我希望在用户编辑它时触发它。
这就是为什么我用以下代码附上我的单元格值更改操作:
void changeCellOperation()
{
dgv.CellValueChanged -= new DataGridViewCellEventHandler(dgv_CellValueChanged);
...
cell.Value = myNewCellValue
...
dgv.CellValueChanged += new DataGridViewCellEventHandler(dgv_CellValueChanged);
}
我最终拥有了几个不同的功能,其中我的 DataGridView 单元格以这种方式更新。
因为这些函数是从不同的地方调用的并且可以嵌套,所以我不能保持这个代码不变以避免事件不需要的事件重新激活。
所以我以这种方式结束:
int valueChangedEventMask = 0;
void changeCellOperation()
{
valueChangedEventMask++;
...
cell.Value = myNewCellValue
...
valueChangedEventMask--;
}
void dgv_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
if (valueChangedEventMask > 0)
return
...
}
这工作正常。此外,当调用嵌套时,包括在事件本身内部。
但是该CellValueChanged
事件现在无缘无故地被触发了太多次。
因为我经常不得不处理这种模式,所以我正在寻找一种可以普遍适用于 UI 中的事件的解决方案,而不仅仅是 DataGridView。
所以我的问题是:
正确屏蔽 UI 事件并避免不必要的事件触发的最佳技巧是什么?