フレキシブルグリッド上で矢印キーを認識するには?


やまと  2003-04-14 20:55:13  No: 77698

フレキシブルグリッド上で矢印キーが押されたかを認識したいのですが
可能でしょうか?
KeyDown等で認識できるかと思っていたのですが、どうもイベントが
発生していないようです。ブレイクポイントをはったのですが、ダメでした。


batchman  2003-04-15 01:30:52  No: 77699

下記のMSDNサポート情報に矢印キーがトラップ出来ないのは「仕様です」となっています。

http://support.microsoft.com/default.aspx?scid=kb;ja;171733

#FlexGridのサブクラス化をすれば、出来るかなあ....
#やったこと無いので出来るかどうか定かでありません...


...  2003-04-15 03:40:26  No: 77700

ふぉーむの きーだうん か きーぷれす + あくてぃぶこんとろーる!


VBレスキュ-(花ちゃん)  URL  2003-04-15 06:59:08  No: 77701

MSFlexGrid での入力はTextBoxを使っているかと思います。
その Text1_KeyDown イベントに書いて見て下さい。

詳しくは、下記URLのMSFlexGrid関係を見て下さい。

    http://www.bcap.co.jp/hanafusa/


やまと  2003-04-15 17:15:32  No: 77702

やはり「仕様」なのですね。
テキストボックスを利用したキーのイベントについては、
参照して知っていましたが、今回はテキストボックスは
利用していません。
今回やりたいことの説明が不足していました。すみません。
アクティブな行の1列目の文字色を変更したいというのが
今回の趣旨です。矢印キー(上下)で行が移動したとき
移動前の行の文字色を黒にし、移動後の行の1列目の文字色
を赤にしたいのです。
フォームのキーダウンは試していないので、試してみたいと
思います。
結果がでましたら、報告いたします。


batchman  2003-04-15 18:09:41  No: 77703

FormのKeyPreviewをTrueにしても、FlexGridにフォーカスがあるとなぜか矢印キーが取れません。
そこらへんがMicrosoftがいう仕様なのかな...

#FlexGrid以外にフォーカスが取れるコントロールがあって、
#常にFlexGrid以外のコントロールにフォーカス移せば取れる
#ようではありますが...


VBレスキュ−(花ちゃん)  2003-04-15 19:56:51  No: 77704

>テキストボックスを利用したキーのイベントについては、
>参照して知っていましたが、今回はテキストボックスは
>利用していません。

だったら見えない位置にダミーで貼り付けておけばいいのでは


batchman  2003-04-17 03:03:08  No: 77705

満たさないといけない条件をよくよく考えてみたら、
キーイベントでやらなくても出来るような気がするのですが...

こんなのでどうでしょう?

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


やまと  2003-04-17 22:24:32  No: 77706

batchmanさん、このコードですと、ROWやCOLをセット
した時点で、LeaveCell、EnterCellイベントが発生
してしまい無限ループしませんでしょうか?


nanashi  2003-04-17 22:57:16  No: 77707

mbolEditがフラグになってるから平気でしょ。


ドンキー  2003-09-24 20:20:23  No: 77708

MSHFlexGrid(Microsoft Hierarchical FlexGrid) なら KeyDownイベントで拾えますよ。
作りもMSFlexGridとほとんど同じなので使ってみては?


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加