この記事は OUCC Advent Calendar 2023 の14日目の記事です。空いていたので入れてみました。
DataGridView のセルのイベントの順番とは
Windows Forms のイベントの順番は Microsoft 公式ドキュメント に記載があります。 しかし、DataGridViewのセルのフォーカスなどの順番は記載がありません(自分は見つけられませんでした)
ここではセルの編集に関するイベントの順序について説明します。
セルに入るとき
セルに入るときのイベントの順序は以下のとおりです。
CellBeginEditCellClick(クリックしたときのみ)CellEnter
セルから出るとき
セルから出るときはいくつかのパターンがあります。
実際にDGVを使用する際はINotifyPropertyChangedを実装したモデルを使用することが多いと思うのでそちらも同時に記載しました。
普通の操作で出るとき
これにはクリック、Tab移動、dataGridView.Enabled = falseによる移動などが該当します。
CellLeaveCellValidatingCellParsingModel.PropertyChangedCellValueChangedCellValidatedCellEndEdit
Validate()で抜けるとき
ContainerControl.Validate()を直接呼び出した場合のイベントの順番です。(ContainerControlはFormやUserControlが継承しているのでDGVを置いているControlでthis.Validate()でアクセスできます)
CellValidatingCellParsingModel.PropertyChangedCellValueChangedCellValidatedCellEndEdit
EndEdit()で抜けるとき
DataGridView.EndEdit()を直接呼び出した場合のイベントの順番です。
CellParsingModel.PropertyChangedCellValueChangedCellEndEdit
このようにEndEdit()で抜けてしまうとバリデーションができないので、DGVの編集を終わらせたいときはEndEdit()を使うよりValidate()を使うほうが良いです。
参考サイト