• ベストアンサー

ListViewで、PageDownキーイベントを発生させるには?

VB6で開発しています。 ラベルとListViewのみのフォーム上で、 PageUpやPageDownキー押下で、イベントを発生させたいのですが、 PageDownを押下すると、ListView内のリストのカーソルが下に移動してしまい、 (フォーカスが当たるコントロールがListViewしかないためと思われますが) イベントが発生せずに困っています。 自分で実現しようとしてできなかった方法を紹介します ・リストビューにフォーカスが当たらないようにする。   Enabled = Falseだとスクロールバーが使えないので困る。    ・ListViewはEnabled=Falseにし、スクロールバーコントロールを使って、スクロールさせる。   スクロールさせる方法が見つかりませんでした。 何か、よいアイデアや方法があれば、ご教授宜しくお願いしますm(_ _)m

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.3

VB6の標準コントロールの場合は FormのKeyPreviewをTrueにすることでコントロールより先にForm側でKeyPress/KeyDown/KeyUpで処理可能なようです しかしListViewやTreeViewの場合同様の設定を施しても ListView側がキーイベントを処理してしまうようです 方法としては ListViewコントロールをサブクラス化してサブクラス化したListViewのWndProcのなかで WM_KEYDOWNなどのメッセージを親に通知する仕組みを構築する必要がありそうです

KOHEI_JAPAN
質問者

補足

上記の方法ですと、大変難しそうで自分には無理です(^^;) 上記の方法を見て思いついて、結局、 ListViewのKeyDownイベントで、フォームのKeyDownイベントを呼び出すことにしました。 いろいろありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • shut0325
  • ベストアンサー率40% (490/1207)
回答No.2

Accessのフォーム上にテキストボックスを配置したケースでテストしました。 Private Sub テキスト0_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = vbKeyPageUp Then MsgBox ("PageUp") If KeyCode = vbKeyPageDown Then MsgBox ("PageDown") End Sub これまた参考までに。

KOHEI_JAPAN
質問者

お礼

ありがとうございます。参考にいたします。

すると、全ての回答が全文表示されます。
  • shut0325
  • ベストアンサー率40% (490/1207)
回答No.1

PageUp/PageDownはKeyPressイベントでは使用不可のようです。 KeyDown/KeyUpイベントの場合は使用可能のようです。 この2点はVB6(持っていいないのでAccessVBAリファレンスを参照しました)もVB.netも同じのようですが、.netの方には自動処理(本来の動作)を無効にするために(?)IsInputKey メソッドをオーバーライドしろと記述がありますが、VBAの方には特に記述がなかったので、詳細不明です。 以下その解説を転載します。 キーボード イベントをフォームでだけ処理し、そのイベントを他のコントロールでは受け取らないようにする場合は、フォームの KeyPress イベント処理メソッドの KeyPressEventArgs.Handled プロパティを true に設定します。Tab キー、Enter キー、Esc キー、方向キーなどは、コントロールによって自動処理されます。これらのキーで KeyDown イベントを発生させるには、フォーム上の各コントロールで IsInputKey メソッドをオーバーライドする必要があります。IsInputKey のオーバーライドのコードは、特殊なキーのいずれかが押され、そのキーが true の値を返したかどうかを判断する必要があります。 文中の「これらのキー」にPageUp/PageDownはふくまれます。 以上参考までに。

すると、全ての回答が全文表示されます。

関連するQ&A