質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

1回答

15424閲覧

DataGridView セル移動

yyy

総合スコア49

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

0クリップ

投稿2016/08/31 02:46

編集2016/08/31 03:00

###前提・実現したいこと
DataGridViewのセルでEnterを押したときに「下行へ移動」ではなく「右列に移動」をさせたい。

※「Enterが押下される」という動作のコードが書けていません。
それも含めどのように書けばいいか教えていただきたいです。

###該当のソースコード

VB.NET

1 Private Sub DataGridView1_Enter(ByVal sender As Object, e As EventArgs) Handles DataGridView1.Enter 2 3 End Sub

###試したこと
サイトを調べてみたのですが、どれも難しく、理解ができませんでした。
上記のコードを使って書ければ自分にもわかりやすいのではないかと思ったのですが、通常そういう風には書かない、等も教えていただきたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

結論から言うと、簡単にはできないので難しいやりかた(DataGridViewの派生クラスを自作する方法)がたくさん紹介されているのだと思います。

まず、提示いただいたコードはDataGridViewのEnterイベントで処理しようとしていますが、残念ながらこれはENTERキー押下時に発生するイベントではありません。
DataGridViewコントロールが入力されたとき(他のコントロールからフォーカスが移ってきたときなど)に発生するイベントです。

キー押下時に発生するイベントとしては、KeyDownイベントというものがあります。
しかしDataGridViewではENTERキー押下に特別な動きが与えられているようで、実際ENTERキー押下時の動作を確認すると、
①ENTERキーを押下
②CellLeaveイベント発生
③CellEndEditイベント発生(セル編集中だった場合)
④CellEnterイベント発生(1つ下のセルのEnterイベント)
⑤KeyDownイベント発生
という具合で、KeyDownイベントの発生前に元のセルを抜けて下のセルに移動する処理が行われてしまっています。
KeyDownイベントが発生した時点ではもう下のセルに移動しており、元々キーを押したときにいたセルの情報など知ることもできない状態です。

ここらへんが既存のDataGridViewのイベントだけで処理するのが難しい理由なのだと思います。

見栄えを気にしないのなら、

Private Sub DataGridView_Keydown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles DataGridView.KeyUp If e.KeyCode = Keys.Enter Then SendKeys.Send("{UP}") '上に移動 SendKeys.Send("{TAB}") '右に移動 e.Handled = True End If End Sub

のようなコードで結果的として右に移動した状態にすることはできます。
ごまかしのようなやり方ですし、EditModeプロパティの設定にも左右されるため全く推奨はできません。。(^_^;

がんばって派生クラスを作成したほうがよさそうですね。

投稿2016/08/31 07:45

jawa

総合スコア3013

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yyy

2016/09/01 04:37 編集

ご回答くださりありがとうございます。 そういうことなのですね!納得いたしました…。 jawaさんに書いていただいたコードを参考にしつつ、もう少ししっかりと勉強してサイトに記載されている内容も理解できるようにしたいと思います。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問