久しぶりに質問させていただきます、たいちうです。
テキストボックスのKeyPressイベントなんですが、下記のコードで実験すると、
デバッグ時にはKeyDownイベントのみが、
実行ファイルからは、KeyPress->KeyDownの順でイベントが発生しました。
Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
MsgBox KeyDown
End Sub
Private Sub Text1_KeyPress(KeyAscii As Integer)
MsgBox KeyPress
End Sub
環境:WinNT4 + VB6.0SP5
1.デバッグ時と実行ファイルからとで、呼ばれるイベントが異なるというのは、
VBのバグなのでしょうか?
2.MSDNには、KeyPressイベントの発生は
「ユーザーが、ANSI 文字キーを押して離したときに発生します。」とあるので、
実行時の発生順序も逆ではないでしょうか?
3.KeyDownとKeyPressの両方を同時に使うのが良くないのでしょうか?
以上、宜しくおねがいします。
# 去年の8月頃に質問した「タブキーでフォーカスを移したくない」という質問ですが、
# 長らくほっといたのですが、解決しています。有り難うございました。
# 過去ログへの書き込みができなくなっているのですが、わざわざスレを立てるほどの
# 内容でもないと思い、ほっておいているのですが、リクエストがあるようでしたら、
# 新スレッドで報告させていただきます。
私の環境(Win2K+SP2, VB6+SP5)では正しく動いてましたよ。(KeyDown->KeyPress)
下のコードで確認しました。MsgBoxはボタンが押下されるまで処理が止まってしまうの
で使ってません。
Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
Text2 = Text2 & KeyDown & vbCrLf
End Sub
Private Sub Text1_KeyPress(KeyAscii As Integer)
Text2 = Text2 & KeyPress & vbCrLf
End Sub
GODさま 早速の回答有り難うございます。
デバッグでも実行ファイルでも、Text2は正しく表示できました。
どうやら、先に呼ばれるKeyDownにMsgBoxを書くと、処理が変わってくるようです。
デバッグ時には、KeyDownから呼ばれたMsgBoxで処理が止まり、KeyPressイベントが
発生しない。
実行ファイルからでは、KeyDownがOSにMessageBoxの表示を依頼し、
続けてKeyPressもMessageBoxの表示を依頼。
OSがMessageBoxを表示する時に、なぜか順番が逆になっているのでしょう。
...このように想像しています。
もっと良い説明、証明、反証がありましたら、お教え下さい。
追加情報がなさそうですので、解決とさせていただきます。
有り難うございました。
# 実用上はもう問題ないと思うんですが、ちょっと納得できてないんですけどね。
# VBのバグですよね?