我正在使用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