我正在使用DataGridView,并使用CellValueChanged
事件。掩盖UI事件的最佳方法是什么?
我不想当代码更改单元格值时触发此事件。但是,我希望在用户编辑它时触发它。
这就是为什么我附上我的单元格的值更改操作用下面的代码:
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中Events的解决方案,而不仅仅是DataGridView。
所以我的问题是:
什么是正确掩盖UI活动,避免不必要的火灾事件的最好的提示?
[通过用户交互引发的事件和我自己的代码区分]的可能重复(http://stackoverflow.com/questions/729897/differentiating-between-events-raised-by-user-interaction-and -my-own-code) – 2013-02-18 14:10:58
类似[CellBeginEdit](http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.cellbeginedit(v = vs.110).aspx)? – 2013-02-18 14:12:24
感谢您的指点。对不起,链接的问题很遗憾地回答我的问题。我无法使用CellBeginEdit:它在用户开始键入单元格时立即触发。 – Larry 2013-02-18 14:17:01