dポイントプレゼントキャンペーン実施中!

DataGridViewで入力チェックを行いたいのですが、移動先のセルが移動元のセルよりも下の列あるいは右下の場合だけ入力チェックをしたいのですが、どうしたらよいでしょうか?
CellValidatingイベント等では、移動元のセル情報は取得できるのですが、移動先のセル情報が取得できません。

根本的にこのようなチェック機能自体問題があるでしょうか?

A 回答 (2件)

No.1です。


恐らく、セル移動が終了しないうちに、更に別のセルに移動させようとして
いるから、エラーとなるのでしょう。
やり方としては汚いですが(汗)、セル移動専用のInterval=10とかの
Timerを準備しておいて、移動したい場合のみTimerを起動し、
Timer.Tickイベント側で、Timerを停止してセル移動を行うって手も
あります。
DataGridViewは色々クセがありますので、こういう手で逃げるのも
ある意味楽で良いです。但しちゃんとコメント書いとかないと訳わかんなく
なりますし、他の人が見ても謎のソースになります(滝汗)。
…サブクラスとか作って綺麗に処理書ける方がいらっしゃったら補足お願いします…
    • good
    • 0
この回答へのお礼

早々のご返事ありがとうございます。

Timerで逃げるのも手かもしれませんね。
一度試してみます。

どうもありがとうございます。

お礼日時:2008/04/30 14:57

少ししか検証してない上に、もっと効率的なやり方もあるかもですが、


DataGridViewのセル移動では、CellLeaveイベントが発生してから
CellEnterイベントが発生しているようなので、CellLeaveの時点で
CellのRow,Columnをモジュールレベル以上のスコープを持つ変数を使用して
憶えておき、CellEnterの時点で、それと移動後のRow,Columnを比較すれば、
何とかなる気は します。
(この程度だと気付いてるかもしれませんが…)
ただ、このやり方だと、例えば条件によってセル移動をキャンセルしたり
する場合は、チラついたり動作が遅くなったりする可能性もあると思います。
あと、他のコントロールにフォーカスが移動した場合も、CellLeaveは
発生しますので、その場合の動作は、適宜アレンジしてください。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

ご指摘頂いたやり方も試していたのですが、セル移動のキャンセル
がうまく出来ないので断念しておりました。
CellEnterイベントでセル移動のキャンセルが発生した場合に、
保存しておいたRow、Column情報を、CurrentCellにセットすると
エラーが発生してしまいます。

どうしても回避できなかったので、CellValidatingイベントで
入力チェックが行えないものかと考えておりました。

CurrentCellでフォーカスを戻すやり方がまずいのでしょうか?

お礼日時:2008/04/30 11:48

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!