- PR -

DataGridViewのイベント発生のタイミングについて

投稿者投稿内容
さよこ
ベテラン
会議室デビュー日: 2005/10/13
投稿数: 78
投稿日時: 2007-03-15 18:30
こんばんは。
DataGridViewを継承して、Enterキーが押されたら、右のセルに移動するようにしています。また、CellValueChangedイベントを使って、入力された値を別の変数に格納するようにしています。
デバック実行をしていくと、ProcessDialogKeyをオーバーライドしたメソッドでEnterキー押下を拾って、カレントセルの移動を行う途中で、CellValueChangedイベントが発生し、値の格納が行われています。今のところ、カレントセルの移動が行われる前に、値の格納が行われるので、問題がないのですが、常にカレントセルの移動が完了する前にCellValueChangedイベントが発生するのか確証が持てません。(カレントセルの移動後に値の格納が行われると、違う値を格納してしまうことになってしまいます)
説明が下手で申し訳ないのですが、処理手順として、これで正しいのでしょうか。
あるいは、別の適切なイベントがあるのでしょうか。

Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2007-03-15 22:16
値が確定するのはいつだと思いますか?

そこから考えていけばわかるんじゃないかな

値の格納とカレント セルの移動ってのが何(イベント)を指しているのかよくわかんないけど
_________________
Ahf
大ベテラン
会議室デビュー日: 2006/08/16
投稿数: 172
投稿日時: 2007-03-15 23:28
#どのようなオーバーライドを行っているかわかりませんけど

ProcessDialogKeyメソッドのオーバーライドを行っているということは、
そこのロジック次第でCellValueChangedの発生タイミングは変わる気がします。

なんとなく、ですけど。
「移動が終わる」前ではなく「移動の途中で」発生している気が・・・。
さよこ
ベテラン
会議室デビュー日: 2005/10/13
投稿数: 78
投稿日時: 2007-03-16 07:56
ありがとうございます。
そうです。移動の途中で発生しています。
コードでカレントセルを移動させることで値が確定され、CellValueChangedイベントが発生し、カレントセルが変わる前に値を上手く取れているのかなと思うのですが。
微妙なタイミングなので、今ひとつ確証が持てなくて。
ぽぴ王子
ぬし
会議室デビュー日: 2006/03/24
投稿数: 475
お住まい・勤務地: お住まい:城・勤務地:城
投稿日時: 2007-03-16 10:09
DataGridView を継承しているなら、変更されたタイミングもオーバーライ
ドして自分で把握できるのではないかしら…などと思いつつ。
CellValueChanged イベントは DataGridViewCellEventArgs 型を持っ
ているわけで、そこに ColumnIndex と RowIndex が存在するのは
MSDN を見ればわかっちゃっちゃったりするわけですよね。
そこから「どのセルが変更されたのか」は導き出せると思います。

「カレントセル」なんてものすごい曖昧な場所を利用するよりは確実なんじゃ
ないかと思いますが、いかがでしょう。
_________________
ぽぴ王子@わんくま同盟
ぽぴ王子の人生プログラミング中 / ぽぴンち。
Ahf
大ベテラン
会議室デビュー日: 2006/08/16
投稿数: 172
投稿日時: 2007-03-16 11:06
ひょっとして編集状態を操作しないまま、CurrentCellを変更していますか?
であれば、そのタイミングでCellValueChangedは発生すると思います。

全てはオーバーライドしているロジック次第ですので、
一度ロジックを追いきることをお勧めします。

#MSDNフォーラムで見たロジックがProcessDialogKeyに書かれている予感。
#自分もそこからスタートしているので・・・なんとなく。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2007-03-16 18:53
引用:

さよこさんの書き込み (2007-03-16 07:56) より:
ありがとうございます。
そうです。移動の途中で発生しています。
コードでカレントセルを移動させることで値が確定され、CellValueChangedイベントが発生し、カレントセルが変わる前に値を上手く取れているのかなと思うのですが。
微妙なタイミングなので、今ひとつ確証が持てなくて。


だから、値が何時確定しますか?
フォーカスを移すと、入力ができなくなる=確定するんじゃないですか?

TextBox クラスでいうところの、Validating イベントと同じタイミングで発生していると思います。
_________________
Ahf
大ベテラン
会議室デビュー日: 2006/08/16
投稿数: 172
投稿日時: 2007-03-16 19:03
値が確定するのは、
フォーカスが移るタイミングと、CommitEditを行ったタイミングだと思います。

#EndEditはどうだったか・・・?

ですので、オーバーライドしたロジック次第かと。
オーバーライドしていないなら、他のValidating系のイベントと同様のタイミング
なんですけどね。

スキルアップ/キャリアアップ(JOB@IT)