現在CellStateChangedイベントを使ってセルの移動があった際に、特定の処理をしているのですが。
マウスでセルを移動された場合はメッセージを出してCellStateChangedイベントをキャンセルしたいです。
DataGridViewのイベントでマウスによるセルの移動とプログラム上から「DataGridView1(1, 2).Selected = True」などでセルを移動した場合を判別する方法はありますでしょうか?
CellStateChangedイベントの使用を変更しないで出来る方法があれば教えてください。
(VisualStudio2017 VB.netを使っています。)
CellStateChangedイベントは、セルが選択された、という状態以外でも発生するので、CellEnterイベントを使用するのが一般的だと思います。
ところで、CellStateChangedにしろCellEnterにしろ、セル選択によりイベントが発生しますが、セル選択は例えば以下により発生します。
・マウスクリックによるセル選択
・プログラムからのセル選択
・矢印キー等によるセル移動選択
・入力可能セルがある場合、入力完了後のセル移動選択
上記のうち、セル選択(移動)イベントでの処理を行いたい(または行いたくない)のはどれですか?
すみません現在開発中のプログラムの既存の処理でCellStateChangedイベントが使われていて、それを変更すると色々なところに影響が出そうなので変えたくないと思っています。
・マウスクリックによるセル選択
マウスクリックによるセル選択のときだけ「編集が取り消されますがよろしいですか?」みたいなメッセージを表示させ、OKボタンを押した場合セル移動をしてCellStateChangedイベント処理をスキップ出来ればと思っています。キャンセルを押した場合はセルを移動せずCellStateChangedイベントも走らないようにしたいです。
・プログラムからのセル選択
現在、ボタン押下時にセル移動した場合にイベントを発生させています
このときだけイベントが走って欲しいです。
・矢印キー等によるセル移動選択
忘れていましたが、矢印キー等によるセル移動選択のときはメッセージを表示させず、イベントも走らせずセル移動だけできるようにしたいです。(行選択の画面なので上下移動だけです)
・入力可能セルがある場合、入力完了後のセル移動選択
直接セルに入力することはないので、入力完了後のセル移動選択はないです。
データグリッドの下にあるテキストボックスに値を入れてボタンを押してセルを移動した際、テキストボックスの値を選択されていたデータグリッドの行に反映するといったものです。
逆にデータグリッドのセルを選択すると選択された行の値をテキストボックスに表示します。
これを書いていて思ったのですが、行をマウスで選択した際に選択された行の値をテキストボックスに反映する処理はCellStateChangedイベント内でやっているため色々と考え直す必要がありそうです。。。
すみません・・・
DataGridViewではMultiSelectを許可していますか?
また、CellStateChangedイベント内の処理で、別のセル選択が行われることがありますか?
ついでに、CellStateChangedイベントでは、選択状態以外の状態変更は無視するようになっていますか?
>・プログラムからのセル選択
> 現在、ボタン押下時にセル移動した場合にイベントを発生させています
> このときだけイベントが走って欲しいです。
ボタン押下でセル移動させた処理のルーチンで、今回CellStateChangedで行おうとした処理を行えばいいんじゃないでしょうか?
MultiSelectは許可していません。
また、CellStateChangedイベント内でテキストボックスの値に不備があった場合セル移動を元の場所に戻すという処理が行われています。
>ボタン押下でセル移動させた処理のルーチンで、今回CellStateChangedで行おうとした処理を行えば>いいんじゃないでしょうか?
言われてみればたしかにそうですね・・・
ほんとにそれでいいのか月曜日にまた確認したいと思います。ありがとうございました
>ボタン押下でセル移動させた処理のルーチンで、今回CellStateChangedで行おうとした処理を行えば
>いいんじゃないでしょうか?
これについては「質問への追記・修正…の依頼」で議論すべきことではないと思いましたので、回答に移動します。
回答2件
あなたの回答
tips
プレビュー