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