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

DataGridでコンボ(改良)

環境/言語:[WinXP_Pro VB.NET2003 FrameWork1.1_SP1]
分類:[.NET]

いつも参考にさせて頂いています。

こちらのサイトで紹介されていたサンプルを利用させて頂き、
DataGrid上にComboBoxを表示・入力する画面を作成してみました。

そこで表題の件なのですが、矢印キーでコンボボックスの選択を
変更できないものかと考えています。
サンプルクラスの仕様として「ComboBoxをキーで操作することは
できません。」と明記されていますが、改修によって実現は可能
でしょうか?

私が現在、試している方法は、、、
・DataGridComboBox.WndProcを外す。
 →キーイベントを無効にしているようでしたので。
・DataGridComboBoxColumn.Newにて、イベントハンドラを追加。
 →AddHandler _combo.KeyDown, AddressOf _comboBox_KeyDown
・DataGridComboBoxColumn._comboBox_KeyDown(中身は↓)
Private Sub _comboBox_KeyDown(ByVal sender As Object, _
ByVal e As System.Windows.Forms.KeyEventArgs)
Call MsgBox(e.KeyCode, MsgBoxStyle.OKOnly)
End Sub

実際には、ここでKeyCode判別して矢印の場合はコンボの選択を変更
しようとしています。
しかし実行した結果、「矢印キー以外」のキーコードは取れるように
なったのですが、肝心の矢印キーの入力が引っ掛けられません。

対処方法がありましたら、ぜひご教授頂けませんでしょうか。
よろしくお願い致します。
この辺りが参考になるかもしれません。

Windowsアプリケーションで方向キーなどの特殊キーを処理するには?
http://www.atmarkit.co.jp/fdotnet/dotnettips/241windlgkey/windlgkey.html
trapemiyaさん、ありがとうございます。

この週末に、しっかり読んで理解しておき、月曜日に試してみたいと思います。
その時に、また何かありましたらよろしく御願い致します。
trapemiyaさんに教えて頂いたurlを読み進め、チャレンジしてみました。
結論から申しますと、うまくいきませんでした。

うまくいかない理由も何となく分かったつもりです。
今回の画面ではフォーム上にDataGridを配置し、列項目にコンボボックスを
表示できるようにしています。
http://dobon.net/vb/dotnet/datagrid/datagridcombobox.html
ここで紹介されていたクラスを元に、表示する行毎に違うアイテムのコンボ
ボックスが表示できるよう変更したものです。

そこで今回はComboBoxクラスからの派生クラスでProcessDialogKeyをオーバー
ライドしてみたのですが、やはり矢印キー押下で処理が流れませんでした。(ProcessDialogKeyの先頭でブレークポイント設定していました)

trapemiyaさんに教えて頂いたurlで、
「ProcessDialogKeyメソッドはコントロール→フォームの順で呼ばれる」
との記載があったため、この位置に追加してみたのですが特殊入力キーだけ
制御できないと言うことは、これより先にプリプロセスが走っているコント
ロール(クラス)があるということですよね。
もしかしてDataGridクラス本体でしょうか・・・。
だとすると、イヤな予感がして来ました;;
お世話になります。

途中経過ですが、Form,DataGridの派生クラス,コンボボックスの派生クラス
全てでProcessDialogKeyメソッドをオーバーライドして網を張ったところ、
通常のキー入力の場合は、コンボボックスの派生クラスでのオーバーライドが
最初に走りました。

しかしながら、矢印キーではどこにも引っかからない状況です。
いったいどこで前処理しちゃってるのでしょうか・・・
■No15895に返信(あやさんの記事)
> 全てでProcessDialogKeyメソッドをオーバーライドして網を張ったところ、

ProcessCmdKeyを試してみては?
>
> ProcessCmdKeyを試してみては?
>

bettaさんありがとうございます!!!
ご指摘の通り、ProcessCmdKeyメソッドのオーバーライドで
引っ掛けることができました。
これで1歩前進できます。
本当にありがとうございました。
解決済み!
こちらも紹介すべきでしたね。すみません。

Windowsアプリケーションでキー処理が行われる順序は?
http://www.atmarkit.co.jp/fdotnet/dotnettips/243winkeyproc/winkeyproc.html
解決済み!

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