- - PR -
◆DataGridView でKeyDownイベントを捕捉したい。
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2008-08-14 07:52
発生場所1→RemoveHandler tb.KeyDown, AddressOf dataGridViewTextBox_KeyDown
発生場所2→AddHandler tb.KeyDown, AddressOf dataGridViewTextBox_KeyDown こちらではエラーもなくいけてるので何とも言いようがないのですが、 エラー内容からすると、dataGridViewTextBox_KeyDownが無いよということなので、 Private Sub dataGridViewTextBox_KeyDown(byval〜) Handles DataGridView1.KeyDown を作られてなかったりしますか? Private Sub dataGridViewTextBox_KeyPress(byval〜) Handles DataGridView1.KeyPress のままだったり・・・?検討違いでしたらすみません。 →「"e.KeyCode"は"System.Windows.Forms.KeyEventArgs"のメンバーではありません。」の方はちょっと見てみますね。 あ、一応、こちらの環境もWindowsXP VB2005EEです。 [ メッセージ編集済み 編集者: とーちゃん 編集日時 2008-08-14 07:56 ] | ||||||||
|
投稿日時: 2008-08-14 08:57
とーちゃんさん、すみません
私のDataGridViewフォームで色々とテストしていたので関係ないブロックを消しますと エラーはなくなりました。すみませんでした。 ただ正常に動作しないので次のように書き換えて実行しましたし、該当セルに "1" と"Enter"を押すと"1"の後にはメッセージが表示されますが"Enter"の後には メッセージが表示されません。
このことは"Enter"の捕捉が出来ていないのではないでしょうか? よろしくお願いいたします。 [ メッセージ編集済み 編集者: One.net 編集日時 2008-08-14 09:01 ] | ||||||||
|
投稿日時: 2008-08-14 09:18
すみません。KeyDownのことばかり考えてました。
目的は"Enter"でしたね^^; こちらは、Toshiさんの仰っているPreviewKeyDownを利用すると取得できます。 KeyDownをPreviewKeyDownに変え、 シグネチャをSystem.Windows.Forms.KeyDownEventArgsから System.Windows.Forms.PreviewKeyDownEventArgsに変更しました。
[追記] KeyDownイベントで"Enter"が補足できないのは正常な動作なのではないかなと思います。 '// 私的なことで申し訳ないのですが、明日の晩までネット環境の無い場所に外出いたします。 '// 問題が発生した場合、すぐにフォローができないこと、お詫び申し上げます。 [ メッセージ編集済み 編集者: とーちゃん 編集日時 2008-08-14 09:30 ] | ||||||||
|
投稿日時: 2008-08-14 09:54
とーちゃんさん、ありがとうございました。
了解いたしました。 昨夜は深夜からお付き合いいただき、又今朝も早くからありがとうございました。 涼しい別荘にでもお出かけなのでしょうか。お出かけになる前に取りそぎ御礼申し 上げます。ありがとうございました。 | ||||||||
|
投稿日時: 2008-08-14 10:28
こんにちわ
返信がおそくなりました。 読み返してみたら、Enterが捕捉できないことが趣旨じゃなかったですね・・はじめ・・ 早とちりしました。すいません。 まず、EnterキーがKeyDownイベントで捕捉できないのは正常な動作です。 KeyDownイベントでは、特殊な動作をするキーの捕捉はできません。 たとえば、Tabキーや、Buttonの上にフォーカスがあるときのEnterキーなどです。 これは、それらのキーがほかの動作にわりあてられているためです。 (DataGridViewではEnterキーを押下すると、下方向にフォーカスが移動していきます。) このようなキーの押下時を取得するためには、前述したPreviewKeyDownイベントを利用する必要があります。 → それで、はじめにPreviewKeyDownじゃだめですか?と記載しました。 少し気になった点があります。 Enterキーで動作するとありますが、 Tabキーやカーソルキー・マウスでの操作時はどうなるのでしょうか? このあたりも十分に詰めておいたほうがよいかと思います。 追記)
とありましたが、このエラーの原因は理解されてますでしょうか? 質問内容をとおして思ったのですが、イベントの仕組等について、 もう少し理解を深めたほうがよろしいかと思います。 よねKENさんのHPで説明されていますので、一度熟読されることをお勧めします。 http://www5b.biglobe.ne.jp/~yone-ken/VBNET/special/sp02_event.html あと、
とありますが、Handles以降が必要かも、検討してみてください。 (DataGridViewEditingControlのPreviewKeyDownイベントだけでなく、 DataGridViewのPreviewKeyDownイベントも必要ですか?) この記載があることで、ちょっとした差ですが、Editを表示せずに Enterキーを押下したときにも、計算の処理が走るようになります。 | ||||||||
|
投稿日時: 2008-08-14 11:27
とーちゃんさん
もうお出かけになったと思いますが、KeyDown をPreviewKeyDownに変更することで、 おかげさまで正常にDataGridView で編集中のセルでKeyDownイベントを捕捉し、 "Enter"キーを捉えることが出来ました。また"Enter"キーを捉えることでカーソル 移動も自由に指定できるのではと考え、テストしてみます。本当にありがとうござ いました。 Toshiさん、先日はありがとうございました。 確かに「編集中のセルでKeyDownイベントの捕捉方法」でしたが、回りまわって PreviewKeyDownイベントでないと捕らえられず、PreviewKeyDownイベントを使って 正常に動作するようになりました。 ところでご指摘いただいた「Tabキーやカーソルキー・マウスでの操作時はどうなる のでしょうか? 」についてですが数字をインプットしてTabキーやマウスで次項目へ 移動させた場合のことでしょうか。もしそうなら全く対応していません。なるほど 問題ですね。 また、よねKENさんのHPを読みました。「1.Handles句」「2.senderとe」 「2.AddHandler」などはおまじないのようなものとして記述していました。 最後に大切なことをご指摘いただきました下記のことですが、意味を理解していません。 出来たらもう少し詳しくご指号下さい。
[ メッセージ編集済み 編集者: One.net 編集日時 2008-08-14 11:30 ] | ||||||||
|
投稿日時: 2008-08-14 17:02
こんにちわ、
Handles句とAddHanler について理解はなされましたでしょうか。
と
の違いは把握されていますか? 今回、One.netさんが記載したコードでPreviewKeyDownの イベント発生源のオブジェクト(sender)となりうるのは何でしょう? どういったときに処理を行いたいのでしょう? そのあたりを考えデバッグを行っていくと、 「Handles以降が必要かも、検討してみてください。 」 答えが見えてくると思います。 | ||||||||
|
投稿日時: 2008-08-14 17:37
Toshiさん、ありがとうございます。
Handles DataGridView1.KeyPress を記述するればセルの「編集モード」だけではなく 「選択モード」でもdataGridViewTextBoxのKeyPressイベントを捕捉してくれるようですね。 まだ十分理解できていませんので、ご指摘いただいたサイトを中心にもう少し勉強します。 とーちゃんさんもこれら一連のコードに対して動作を理解するよう指導されました。 Toshiさんの指摘された件に関しても自分で検討し見つけますので、回答は結構です。 本当に色々ありがとうございました。 [ メッセージ編集済み 編集者: One.net 編集日時 2008-08-14 17:39 ] |