フレキシブルグリッド上で矢印キーが押されたかを認識したいのですが
可能でしょうか?
KeyDown等で認識できるかと思っていたのですが、どうもイベントが
発生していないようです。ブレイクポイントをはったのですが、ダメでした。
下記のMSDNサポート情報に矢印キーがトラップ出来ないのは「仕様です」となっています。
http://support.microsoft.com/default.aspx?scid=kb;ja;171733
#FlexGridのサブクラス化をすれば、出来るかなあ....
#やったこと無いので出来るかどうか定かでありません...
ふぉーむの きーだうん か きーぷれす + あくてぃぶこんとろーる!
MSFlexGrid での入力はTextBoxを使っているかと思います。
その Text1_KeyDown イベントに書いて見て下さい。
詳しくは、下記URLのMSFlexGrid関係を見て下さい。
http://www.bcap.co.jp/hanafusa/
やはり「仕様」なのですね。
テキストボックスを利用したキーのイベントについては、
参照して知っていましたが、今回はテキストボックスは
利用していません。
今回やりたいことの説明が不足していました。すみません。
アクティブな行の1列目の文字色を変更したいというのが
今回の趣旨です。矢印キー(上下)で行が移動したとき
移動前の行の文字色を黒にし、移動後の行の1列目の文字色
を赤にしたいのです。
フォームのキーダウンは試していないので、試してみたいと
思います。
結果がでましたら、報告いたします。
FormのKeyPreviewをTrueにしても、FlexGridにフォーカスがあるとなぜか矢印キーが取れません。
そこらへんがMicrosoftがいう仕様なのかな...
#FlexGrid以外にフォーカスが取れるコントロールがあって、
#常にFlexGrid以外のコントロールにフォーカス移せば取れる
#ようではありますが...
>テキストボックスを利用したキーのイベントについては、
>参照して知っていましたが、今回はテキストボックスは
>利用していません。
だったら見えない位置にダミーで貼り付けておけばいいのでは
満たさないといけない条件をよくよく考えてみたら、
キーイベントでやらなくても出来るような気がするのですが...
こんなのでどうでしょう?
Private mlngLeaveRow As Long
Private mlngEnterRow As Long
Private mbolEdit As Boolean
Private Sub MSFlexGrid1_EnterCell()
If mbolEdit = False Then mlngEnterRow = MSFlexGrid1.Row
End Sub
Private Sub MSFlexGrid1_LeaveCell()
If mbolEdit = False Then mlngLeaveRow = MSFlexGrid1.Row
End Sub
Private Sub MSFlexGrid1_RowColChange()
Dim lngCol As Long
If mbolEdit Then Exit Sub
mbolEdit = True
MSFlexGrid1.Redraw = False
lngCol = MSFlexGrid1.Col
MSFlexGrid1.Col = 1
MSFlexGrid1.Row = mlngLeaveRow
MSFlexGrid1.CellBackColor = vbWindowBackground
MSFlexGrid1.Row = mlngEnterRow
MSFlexGrid1.CellBackColor = vbRed
MSFlexGrid1.Col = lngCol
MSFlexGrid1.Redraw = True
mbolEdit = False
End Sub
batchmanさん、このコードですと、ROWやCOLをセット
した時点で、LeaveCell、EnterCellイベントが発生
してしまい無限ループしませんでしょうか?
mbolEditがフラグになってるから平気でしょ。
MSHFlexGrid(Microsoft Hierarchical FlexGrid) なら KeyDownイベントで拾えますよ。
作りもMSFlexGridとほとんど同じなので使ってみては?
ツイート | ![]() |