Enterキーにてコマンドボックスにフォーカスを移動するには?

解決


cooldj  2005-10-26 20:27:01  No: 126943  IP: [192.*.*.*]

最近、VBを始めた超初心者ですがよろしくお願い致します。
現在、手始めに電卓を一から作っているのですがテンキーから数字及び
+-*/を各入力して最後にエンターキーで答えを出すようにしているのですが
どうしてもエンターキーを押すときのみ=ボタンの上にフォーカスが移動されないのです。
ですのでその状態でエンターを押しても現在、フォーカスがあるボタンの数字が入ってしまいます。さっぱりわからず頭を抱えております。
一応、下記にテンキー入力の所とイコールボタン(Command1)のソースを書いておきますのでご指導の程、よろしくお願いします。
----------------------------------------------------------------------
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
'キーボード入力対応
If KeyCode = 13 Then
   Command1.SetFocus
   Command1_Click
ElseIf KeyCode = 96 Then
   Command11.SetFocus
   Command11_Click
ElseIf KeyCode = 97 Then
   Command2.SetFocus
   Command2_Click
ElseIf KeyCode = 98 Then
   Command3.SetFocus
   Command3_Click
ElseIf KeyCode = 99 Then
   Command4.SetFocus
   Command4_Click
ElseIf KeyCode = 100 Then
   Command5.SetFocus
   Command5_Click
ElseIf KeyCode = 101 Then
   Command6.SetFocus
   Command6_Click
ElseIf KeyCode = 102 Then
   Command7.SetFocus
   Command7_Click
ElseIf KeyCode = 103 Then
   Command8.SetFocus
   Command8_Click
ElseIf KeyCode = 104 Then
   Command9.SetFocus
   Command9_Click
ElseIf KeyCode = 105 Then
   Command10.SetFocus
   Command10_Click
ElseIf KeyCode = 107 Then
   Command12.SetFocus
   Command12_Click
ElseIf KeyCode = 109 Then
   Command13.SetFocus
   Command13_Click
ElseIf KeyCode = 106 Then
   Command14.SetFocus
   Command14_Click
ElseIf KeyCode = 111 Then
   Command15.SetFocus
   Command15_Click
ElseIf KeyCode = 27 Then
   Command16.SetFocus
   Command16_Click
End If
End Sub
----------------------------------------------------------------------
Private Sub Command1_Click()
If Label1.Caption = "0." Then
     MsgBox "最初の数字を入れてください", vbOKOnly, "警告"
     Label1.Caption = "0."
Else
Label3.Caption = Y
Select Case 演算
         Case 1
           B = Val(X) + Val(Y)
         Case 2
           B = Val(X) - Val(Y)
         Case 3
           B = Val(X) * Val(Y)
         Case 4
           B = Val(X) / Val(Y)
End Select
       X = Str(B)
       Y = ""
       B = ""
'       前後 = 1
'       A = 1
End If
Label1.Caption = X
End Sub
----------------------------------------------------------------------

編集 削除
ABC  2005-10-26 20:52:17  No: 126944  IP: [192.*.*.*]

Form_KeyDownにEnterキーが押されたときを追加してみてください。

編集 削除
cooldj  2005-10-26 21:00:07  No: 126945  IP: [192.*.*.*]

早速のご指導ありがとうございます。
>Form_KeyDownにEnterキーが押されたときを追加してみてください。
っていうのはどういう事でしょうか?
If KeyCode = 13 Then
   Command1.SetFocus
   Command1_Click
の部分がEnterキーを押した時のイベントになると思うのですが・・・
それともElseIfでもう一度、エンターを押された時のものを追加と
いう意味でしょうか?
初心者ですいません。

編集 削除
ABC  2005-10-26 21:00:46  No: 126946  IP: [192.*.*.*]

追記

  Form_KeyDownを抜けるときに  KeyCode=0  を入れておかないと処理の後に
  キー入力が効いてしまいます。

編集 削除
ABC  2005-10-26 21:03:17  No: 126947  IP: [192.*.*.*]

>If KeyCode = 13 Then
Enterの処理とは気づきませんでした。すいません。

私の場合は、If KeyCode = vbKeyReturn Then と書いてしまうもので。。。

編集 削除
cooldj  2005-10-26 21:11:34  No: 126948  IP: [192.*.*.*]

ややこしい書き方で申し訳ございません。
聞きたいのですが記述的には問題ないんでしょうか?
いろいろ調べてみたのですがエンターキーを押した時点では
KeyCodeには何も値が入らないような感じなんですがエンターキーを
押して何かをしようとする時は何か別の記述や定義をしないと
いけないのでしょうかね?

編集 削除
通ってみた  2005-10-26 21:18:16  No: 126949  IP: [192.*.*.*]

Chr$(13)だったりして

編集 削除
ABC  2005-10-26 21:25:19  No: 126950  IP: [192.*.*.*]

>聞きたいのですが記述的には問題ないんでしょうか?

Form_KeyDownがまずいのかもしれませんね。
何かボタンを押したことによって、そのボタンにフォーカスがあたりますから、
次のキー入力はForm_KeyDownに入らないのではないでしょうか?

Form_KeyDown内のソースを関数化してどのコントロールにフォーカスがあるときでも、その関数を呼ぶようにすればいいと思います。

編集 削除
cooldj  2005-10-26 21:27:07  No: 126951  IP: [192.*.*.*]

>Chr$(13)
とやると”型が違います”とエラーがでますね。
複数のコマンドボタンをFormの上に配置するとなんかEnterキーが効いてないような
気がします。=のコマンドボタンだけ配置してEnterキーを押下するとちゃんと動作をしてくれるのですが・・・

編集 削除
cooldj  2005-10-26 21:32:06  No: 126952  IP: [192.*.*.*]

>何かボタンを押したことによって、そのボタンにフォーカスがあたりますから、
>次のキー入力はForm_KeyDownに入らないのではないでしょうか?
一応、例として"15+20="という計算をするとしたらテンキーで"15+20"まではちゃんと入るのですが"=(Enterキー)"だけが動作しない状態です。

編集 削除
cooldj  2005-10-26 21:34:10  No: 126953  IP: [192.*.*.*]

追記
テンキーの"1"を押して次に"5"を押すと画面にはちゃんと"15"と出てくるという事です。

編集 削除
ABC  2005-10-26 21:41:23  No: 126954  IP: [192.*.*.*]

Enterキーを押したときはForm_KeyDownイベントが発生しないということですか?

編集 削除
cooldj  2005-10-26 21:42:54  No: 126955  IP: [192.*.*.*]

>Enterキーを押したときはForm_KeyDownイベントが発生しないということですか?
はい、その通りです。他のテンキーは全て動作するのですが・・・

編集 削除
ABC  2005-10-26 21:48:29  No: 126956  IP: [192.*.*.*]

Enterキーを押したとき、KeyPressイベントは発生しませんか?

編集 削除
cooldj  2005-10-26 21:56:18  No: 126957  IP: [192.*.*.*]

>Enterキーを押したとき、KeyPressイベントは発生しませんか?
すいません、それは試していないです。今から退社するのでまた、明日にでも試してみたいと思います。
ABCさん、いろいろ教えていただいてありがとうございます。

編集 削除
通ってみた  2005-10-26 22:46:01  No: 126958  IP: [192.*.*.*]

っていうかさ、違うボタンにフォーカスがある状態でEnterキーを押せば、その現在フォーカスがあるボタンを押したことになるからそっちの処理が優先されるんじゃない?

簡単に言えば、各ボタンを押した時にフォーカスをボタンに移さなければいいのではないかと思うんだけど

ボタンを押した時にフォーカスをFormや数値表示部に与えればいいのではないかな?

編集 削除
cooldj  2005-10-27 00:09:05  No: 126959  IP: [192.*.*.*]

通ってみたさんありがとうございます。
早速、明日、試してみたいと思います。

ご意見ありがとうございました。

編集 削除
いな  2005-10-27 09:27:12  No: 126960  IP: [192.*.*.*]

一つ確認
当然、FormのKeyPreviewの値はTrueになっているんだよね?

編集 削除
名無し  2005-10-27 09:47:59  No: 126961  IP: [192.*.*.*]

>いな氏
ほかのキーは反応してるらしいから、なってるんじゃないかな?
と横レス。

編集 削除
いな  2005-10-27 10:04:37  No: 126962  IP: [192.*.*.*]

> 名無し さん
ひょ〜っとしたら、
フォーカスの位置によって、設定して無くてもイベントが
反応しちゃってた・・・。とかいうこともあるしさ。(ないか

編集 削除
cooldj  2005-10-28 17:46:00  No: 126963  IP: [192.*.*.*]

すいません、レス遅くなりました。
結局、各テンキーを押した時に全て=にフォーカスがいくような感じで
落ち着きました。
結局、最後までEnterキーを押してもKeycode=13にならないのはなぜかという疑問は残ったままになってしまいました。アドバイスをいただいたみなさまありがとうございました。

編集 削除
KEN  2005-10-30 12:49:16  No: 126964  IP: [192.*.*.*]

解決後で恐縮ですが、違ったらゴメンなさい。
キーボードとテンキーのEnterキーの値が違ったような…。
違うか…。
(今、テンキー持ってないから試せません)

編集 削除
じゃんぬねっと  URL  2005-10-31 09:23:34  No: 126965  IP: [192.*.*.*]

>KEN さん
AT 互換機ならば一緒だと思います。

Enter によるフォーカス遷移ですが、CommandButton では普通取れませんよね。

2002 以降だと Button コントロールでも ProcessCmdKey などをオーバーライドすることで取れるんですがねぇ。
http://jeanne.wankuma.com/tips/form/27-cobolerform.html

編集 削除