- - PR -
DataGridViewのイベント発生のタイミングについて
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-03-15 18:30
こんばんは。
DataGridViewを継承して、Enterキーが押されたら、右のセルに移動するようにしています。また、CellValueChangedイベントを使って、入力された値を別の変数に格納するようにしています。 デバック実行をしていくと、ProcessDialogKeyをオーバーライドしたメソッドでEnterキー押下を拾って、カレントセルの移動を行う途中で、CellValueChangedイベントが発生し、値の格納が行われています。今のところ、カレントセルの移動が行われる前に、値の格納が行われるので、問題がないのですが、常にカレントセルの移動が完了する前にCellValueChangedイベントが発生するのか確証が持てません。(カレントセルの移動後に値の格納が行われると、違う値を格納してしまうことになってしまいます) 説明が下手で申し訳ないのですが、処理手順として、これで正しいのでしょうか。 あるいは、別の適切なイベントがあるのでしょうか。 | ||||
|
投稿日時: 2007-03-15 22:16
値が確定するのはいつだと思いますか?
そこから考えていけばわかるんじゃないかな 値の格納とカレント セルの移動ってのが何(イベント)を指しているのかよくわかんないけど _________________ | ||||
|
投稿日時: 2007-03-15 23:28
#どのようなオーバーライドを行っているかわかりませんけど
ProcessDialogKeyメソッドのオーバーライドを行っているということは、 そこのロジック次第でCellValueChangedの発生タイミングは変わる気がします。 なんとなく、ですけど。 「移動が終わる」前ではなく「移動の途中で」発生している気が・・・。 | ||||
|
投稿日時: 2007-03-16 07:56
ありがとうございます。
そうです。移動の途中で発生しています。 コードでカレントセルを移動させることで値が確定され、CellValueChangedイベントが発生し、カレントセルが変わる前に値を上手く取れているのかなと思うのですが。 微妙なタイミングなので、今ひとつ確証が持てなくて。 | ||||
|
投稿日時: 2007-03-16 10:09
DataGridView を継承しているなら、変更されたタイミングもオーバーライ
ドして自分で把握できるのではないかしら…などと思いつつ。 CellValueChanged イベントは DataGridViewCellEventArgs 型を持っ ているわけで、そこに ColumnIndex と RowIndex が存在するのは MSDN を見ればわかっちゃっちゃったりするわけですよね。 そこから「どのセルが変更されたのか」は導き出せると思います。 「カレントセル」なんてものすごい曖昧な場所を利用するよりは確実なんじゃ ないかと思いますが、いかがでしょう。 _________________ ぽぴ王子@わんくま同盟 ぽぴ王子の人生プログラミング中 / ぽぴンち。 | ||||
|
投稿日時: 2007-03-16 11:06
ひょっとして編集状態を操作しないまま、CurrentCellを変更していますか?
であれば、そのタイミングでCellValueChangedは発生すると思います。 全てはオーバーライドしているロジック次第ですので、 一度ロジックを追いきることをお勧めします。 #MSDNフォーラムで見たロジックがProcessDialogKeyに書かれている予感。 #自分もそこからスタートしているので・・・なんとなく。 | ||||
|
投稿日時: 2007-03-16 18:53
フォーカスを移すと、入力ができなくなる=確定するんじゃないですか? TextBox クラスでいうところの、Validating イベントと同じタイミングで発生していると思います。 _________________ | ||||
|
投稿日時: 2007-03-16 19:03
値が確定するのは、
フォーカスが移るタイミングと、CommitEditを行ったタイミングだと思います。 #EndEditはどうだったか・・・? ですので、オーバーライドしたロジック次第かと。 オーバーライドしていないなら、他のValidating系のイベントと同様のタイミング なんですけどね。 |