私は 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
イベントは今では何の理由もなく何度も発生しています。
このパターンに対処しなければならないことが多いため、DataGridView だけでなく、UI のイベント全般に適用できるソリューションを探しています。
だから私の質問は:
UI イベントを正しくマスクし、不要なイベントの発生を回避するための最良のヒントは何ですか?