DOBON.NET DOBON.NETプログラミング掲示板過去ログ

DatagridViewのセル移動について

環境/言語:[環境XP、使用言語VB.NET]
分類:[.NET]

2011/07/06(Wed) 16:28:05 編集(投稿者)

DatagridViewで、セル(1,0)に手入力しenterキーを押下したときにカレントセルがセル(1,0)のままのように、カレントセルが下の行に移動しないようにすることは可能でしょうか?

CellEndEditイベントの最後に
DatagridView1.Currentcell=DatagridView1(1,0)
としても下の行に移動してしまいます。
CellLeaveイベントでカレントセル制御してみたらどうでしょうか。
■No28736に返信(uniさんの記事)
> CellLeaveイベントでカレントセル制御してみたらどうでしょうか。

uniさん
返事が遅くなって申し訳ありません。
CellLeaveイベントでは無限ループが発生するようです。
CurrentCellChangeイベントでも同じでした。

CellEndEditイベント後(1,0)から(1,1)に移る時に
CellEnterイベントで
(1,0).selected=true
(1,1).selected=False
としたところ、選択されているセルは(1,0)になりましたが
フォーカス自体は(1,1)にあるようでこれも駄目でした。

引き続きいろいろ試してみます。
■No28739に返信(kzさんの記事)
> ■No28736に返信(uniさんの記事)
>>CellLeaveイベントでカレントセル制御してみたらどうでしょうか。
>
> uniさん
> 返事が遅くなって申し訳ありません。
> CellLeaveイベントでは無限ループが発生するようです。
> CurrentCellChangeイベントでも同じでした。
>
> CellEndEditイベント後(1,0)から(1,1)に移る時に
> CellEnterイベントで
> (1,0).selected=true
> (1,1).selected=False
> としたところ、選択されているセルは(1,0)になりましたが
> フォーカス自体は(1,1)にあるようでこれも駄目でした。
>
> 引き続きいろいろ試してみます。
>
>

DataGridViewのKeyDownイベントにて
Keys.Enterだった場合、e.Handled=Trueにてキャンセルをすれば良いのではないでしょうか

具体的には
DataGridViewのKeyDownイベントに
「If e.KeyCode = Keys.Enter Then e.Handled = True」の記述です
2011/07/07(Thu) 14:01:46 編集(投稿者)
2011/07/07(Thu) 14:00:56 編集(投稿者)
2011/07/07(Thu) 13:59:05 編集(投稿者)

風太郎さん

DataGridViewのKeyDownイベントだと、編集モード以外のEnterキーは無効にできるのですが、編集(手入力)中は無効にできないようです。

また、CellEndEditイベントのEnd Subの直前に
DatagridView1.Currentcell=DatagridView1(1,0)と書いても(1,1)に移動してしまうので
たぶんCellEndEditイベント終了後の行移動は強制的におこるようです。



CellEndEditイベント内で
AddHandler dgv.SelectionChanged, AddressOf dgv_SelectionChangedとし、


Private Sub dgv_SelectionChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)

RemoveHandler dgv.SelectionChanged, AddressOf dgv_SelectionChanged
dgv.CurrentCell = dgv(C,R)

End Sub

とすることで、カレントセルが移動せず思惑通りの動きになりました。
ご協力ありがとうございました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板