
VB6で開発しています。
ラベルとListViewのみのフォーム上で、
PageUpやPageDownキー押下で、イベントを発生させたいのですが、
PageDownを押下すると、ListView内のリストのカーソルが下に移動してしまい、
(フォーカスが当たるコントロールがListViewしかないためと思われますが)
イベントが発生せずに困っています。
自分で実現しようとしてできなかった方法を紹介します
・リストビューにフォーカスが当たらないようにする。
Enabled = Falseだとスクロールバーが使えないので困る。
・ListViewはEnabled=Falseにし、スクロールバーコントロールを使って、スクロールさせる。
スクロールさせる方法が見つかりませんでした。
何か、よいアイデアや方法があれば、ご教授宜しくお願いしますm(_ _)m
No.3ベストアンサー
- 回答日時:
VB6の標準コントロールの場合は FormのKeyPreviewをTrueにすることでコントロールより先にForm側でKeyPress/KeyDown/KeyUpで処理可能なようです
しかしListViewやTreeViewの場合同様の設定を施しても ListView側がキーイベントを処理してしまうようです
方法としては ListViewコントロールをサブクラス化してサブクラス化したListViewのWndProcのなかで WM_KEYDOWNなどのメッセージを親に通知する仕組みを構築する必要がありそうです
この回答への補足
上記の方法ですと、大変難しそうで自分には無理です(^^;)
上記の方法を見て思いついて、結局、
ListViewのKeyDownイベントで、フォームのKeyDownイベントを呼び出すことにしました。
いろいろありがとうございました。
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
これまた参考までに。
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が見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ListView重複データ削除 2 2022/08/05 18:12
- Excel(エクセル) excelvbaのenableeventsについて 3 2022/08/30 11:20
- その他(プログラミング・Web制作) マウスオーバー→ホイール回転でスクロールできない 2 2022/10/31 10:06
- Photoshop(フォトショップ) 【Photoshop】画像拡大時に急激に画面外まで拡大してしまうのを制御したい 1 2023/08/25 03:04
- マウス・キーボード キーボードのCaps Lockキーと変換キーの挙動がおかしくなりました。 4 2022/09/04 22:44
- InternetExplorer(IE) Edge でマウスの真ん中のボタン(ミドルボタン)を押すと、スクロールするのを無効にしたい 2 2023/06/11 05:05
- マウス・キーボード テンキーの設定がおかしくなっています。 5 2023/08/09 15:35
- マウス・キーボード scroll Lockキーを解除したけれど。 1 2022/09/16 09:23
- その他(IT・Webサービス) このサイトのスクロール逆じゃないですか? 1 2022/10/05 20:48
- その他(プログラミング・Web制作) google formsを使ったタスク依頼フォーム作成におけるご相談 1 2023/06/22 15:55
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
タブキー押下時のイベントをひ...
-
Access データ表示 完了時のイ...
-
Visual Basic 6.0 コンボボック...
-
フォーカスについてお教えください
-
テキストボックスの入力文字を1...
-
【VB】タブ切り替え時のイベント
-
コンボボックスにキー入力をさ...
-
VB.NETでフォームがない...
-
KEYPREVIEW=TRUEについて。意味...
-
(VBA)チェックボックスのclick...
-
Objective-Cでキーボードイベン...
-
EXCEL VBA----ユーザーフォーム...
-
キーイベントを擬似的に発生さ...
-
EXCEL VBA でIEを制御して、INP...
-
Excel VBA マクロ実行中のみテンキ...
-
VB.NETのDropDownListをReadOnl...
-
WPFでの時刻入力コントロールに...
-
特定のキーを押すまでループさ...
-
「ご処理進めて頂きますようお...
-
エクセルで、日付を入力すると...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【VB】タブ切り替え時のイベント
-
(VBA)チェックボックスのclick...
-
特定のキーを押すまでループさ...
-
タブキー押下時のイベントをひ...
-
KEYPREVIEW=TRUEについて。意味...
-
WPFでの時刻入力コントロールに...
-
一定時間操作されないと自動で...
-
テキストボックスの入力文字を1...
-
Visual Basic 6.0 コンボボック...
-
VB.NETでフォームがない...
-
コンボボックスにキー入力をさ...
-
自作ダイアログボックス中のエ...
-
エクセルVBAのテキストボック、...
-
Excel VBA マクロ実行中のみテンキ...
-
コントロールキーが押されたキ...
-
フォーカスについてお教えください
-
イベントハンドラが取得できな...
-
VB.NETのDropDownListをReadOnl...
-
C# WMPメディアの終了検知 その2
-
EXCEL VBA----ユーザーフォーム...
おすすめ情報