■ 現在のこのページの役立ち度:
表示されない場合こちらのリンクからもご覧になれます。
■ このページの役立ち度を評価する:
役立ち度を評価してください。
(1(左):あまり役立たない - 5(右):大変役立った):
■ ページの共有:
[ サイト内検索 ]
カスタム検索
#28591-0
コマンドボタン KeyDownイベントで 矢印キーを検出したい。
コマンドボタンを 下記の様に

[1] [2] [3]
[4] [5] [6]
[7] [8] [9] 

と並べて、矢印キーで [1] から [2(左)] もしくは [4(下)] 、[6]からなら
[3(上)] [5(左)] [9(下)] という様なフォーカスの移動を制御したいのですが、
コマンドボタンの KeyDown イベントに vbKeyDown 等の矢印キーを検出ロジックを
記載したのですが、実際に 動かして見ると、矢印キーを押すと自動で TabIndex を
指定した順序に [1]から[2][3][4]... とフォーカスの制御が動いてしまい、
KeyDown イベント自体が発生してくれません。

フォームの KeyPreview を Trueにして、Form_KeyDown イベントでも同様の処理を
書いてみたりもしたのですが、やはり KeyDown イベント自体が起こってくれません。
(F4キーなどの他のキーなら KeyDownイベントも起きるのですが...。)

どなたか良い解決策をご存知ないでしょうか?
#28593-0
RE#28591:コマンドボタン KeyDownイベントで 矢印キーを検出したい。
> コマンドボタンを 下記の様に
> 
> [1] [2] [3]
> [4] [5] [6]
> [7] [8] [9] 
> 
> と並べて、矢印キーで [1] から [2(左)] もしくは [4(下)] 、[6]からなら
> [3(上)] [5(左)] [9(下)] という様なフォーカスの移動を制御したいのですが、
> コマンドボタンの KeyDown イベントに vbKeyDown 等の矢印キーを検出ロジックを
> 記載したのですが、実際に 動かして見ると、矢印キーを押すと自動で TabIndex を
> 指定した順序に [1]から[2][3][4]... とフォーカスの制御が動いてしまい、
> KeyDown イベント自体が発生してくれません。
> 
> フォームの KeyPreview を Trueにして、Form_KeyDown イベントでも同様の処理を
> 書いてみたりもしたのですが、やはり KeyDown イベント自体が起こってくれません。
> (F4キーなどの他のキーなら KeyDownイベントも起きるのですが...。)
> 
> どなたか良い解決策をご存知ないでしょうか?

KeyPressイベントを使ってはどうでしょうか?
私は、数字入力欄で数字及びBS,Enter,Del,ESCのみの入力しか受け付けないようにするのに
KeyPressイベントで
if (Keyascii >= Asc("0")) or (Keyascii <= Asc("9")) or Keyascii = vbkeyback _
   Keyascii = vbkeyDelete or keyascii = 13 or Keyascii = 27 then

処理したい内容

End if
(13と27はアスキーコードのCRとESCです。)
てな感じでEnterとESCを押した時の処理を記述してます。
ちょっと長いですけど。(^^;;
こんな感じでどうですか?
#28594-0
RE#28591:コマンドボタン KeyDownイベントで 矢印キーを検出したい。
> フォームの KeyPreview を Trueにして、Form_KeyDown イベントでも同様の処理を
> 書いてみたりもしたのですが、やはり KeyDown イベント自体が起こってくれません。
> (F4キーなどの他のキーなら KeyDownイベントも起きるのですが...。)
> 
> どなたか良い解決策をご存知ないでしょうか?

VBでは(他の言語は知らないですが)、
CommandButton にフォーカスがある状態では矢印キーの取得は出来ません。

たとえ、TabStop=False でも、コンテナ上に配置していても、Style=2 でもです。
と言うわけでCommandButton を止めましょう。
代替手段として、例えばピクチャボックスにボタンの絵を描いてこれを使うとか(^_^;)
#28597-0
RE#28593:コマンドボタン KeyDownイベントで 矢印キーを検出したい。
> KeyPressイベントを使ってはどうでしょうか?
> 私は、数字入力欄で数字及びBS,Enter,Del,ESCのみの入力しか受け付けないようにするのに
> KeyPressイベントで
> if (Keyascii >= Asc("0")) or (Keyascii <= Asc("9")) or Keyascii = vbkeyback _
>    Keyascii = vbkeyDelete or keyascii = 13 or Keyascii = 27 then
> 
> 処理したい内容
> 
> End if
> (13と27はアスキーコードのCRとESCです。)
> てな感じでEnterとESCを押した時の処理を記述してます。
> ちょっと長いですけど。(^^;;
> こんな感じでどうですか?

KeyPressでも、ボタン上の矢印キーは検出できませんでした。(T_T)

(そもそも KeyPressって矢印キーを検出できましたっけ??
できるとすれば、CHR$() のいくつなんでしょうか? )
#28599-0
RE#28594:コマンドボタン KeyDownイベントで 矢印キーを検出したい。
> > フォームの KeyPreview を Trueにして、Form_KeyDown イベントでも同様の処理を
> > 書いてみたりもしたのですが、やはり KeyDown イベント自体が起こってくれません。
> > (F4キーなどの他のキーなら KeyDownイベントも起きるのですが...。)
> > 
> > どなたか良い解決策をご存知ないでしょうか?
> 
> VBでは(他の言語は知らないですが)、
> CommandButton にフォーカスがある状態では矢印キーの取得は出来ません。
> 
> たとえ、TabStop=False でも、コンテナ上に配置していても、Style=2 でもです。
> と言うわけでCommandButton を止めましょう。
> 代替手段として、例えばピクチャボックスにボタンの絵を描いてこれを使うとか(^_^;)
> 

やっぱり、ムリですか...(>_<)
ピクチャボックスも考えたんですが、クリック時の凹んだ描写が面倒臭いですね...

ありがとうございます。 ピクチャボックスに頑張って絵を書こうかと思います。m(_ _)m
#28600-0
RE#28597:コマンドボタン KeyDownイベントで 矢印キーを検出したい。
> KeyPressでも、ボタン上の矢印キーは検出できませんでした。(T_T)
> 
> (そもそも KeyPressって矢印キーを検出できましたっけ??
> できるとすれば、CHR$() のいくつなんでしょうか? )

KeyPressイベントは、文字キー(ファンクションキー、InsertやDeleteなどの編集キー、
移動キー以外のキー)を押して離したときに発生します。

従って、矢印キーでは KeyPressイベントは発生しません。替わりに KeyDown、KeyUp
イベントを使います。
お探しの情報は見つかりましたか?お困りの問題は解決しましたか?
サイト内検索, 似た記事検索で見つからなくてもあきらめずに掲示板で質問してみましょう。
VB初心者友の会があなたのお役に立てれば幸いです。また、本ページの投稿者の方々にこの場を借りて感謝致します。
本ページは過去ログを集めて自動構成しています。よろしければこのページに関するフィードバックをお願いします。
(※ 構成の誤り、広告等の不適切な記事、リンク切れ、読めないページの報告など)