ENTERでテキストボックスのフォーカス移動
(テキストボックスの中身を青く反転)するプログラムを作っているのですが、
上手く反転してくれません。
しばらくENTERを押しっぱなしにしてると
反転するのですがはじめから、はじめから
反転させるにはどうしたら良いでしょうか
アドバイス御願い致します
ENTERでフォーカス移動する部分はじゃんぬねっとさんのHPに在ったのを
使わせて頂いてます。
' PostMessage 関数
Private Declare Function PostMessage Lib "USER32.DLL" Alias "PostMessageA" ( _
ByVal hWnd As Long, _
ByVal wMsg As Long, _
ByVal wParam As Long, _
ByVal lParam As Long _
) As Long
' 定数の定義
Private Const WM_KEYDOWN As Long = &H100 ' キー押し下げ
Private Const VK_TAB As Long = &H9 ' Tab キー
’青く反転させる
Private Sub textActive(frm As Form)
Dim txtControl As TextBox
'テキストボックスの場合反転
If TypeOf frm.ActiveControl Is TextBox Then
Set txtControl = frm.ActiveControl
txtControl.SelStart = 0
txtControl.SelLength = Len(txtControl.Text)
End If
End Sub
' [Enter] キーで [Tab] キーを飛ばすことによってフォーカス遷移する
Private Sub Form_KeyPress(ByRef KeyAscii As Integer)
If KeyAscii = vbKeyReturn Then
Call PostMessage(Me.hWnd, WM_KEYDOWN, VK_TAB, ByVal 0&)
KeyAscii = 0 '音を消す
’青く反転させる
textActive Me
End If
End Sub
> Call PostMessage(Me.hWnd, WM_KEYDOWN, VK_TAB, ByVal 0&)
このPostMessageによって投げられたメッセージを処理する前に、
> textActive Me
これが着てしまうからでは?
→原因がそうなら、
他のコントロールにフォーカスが移ったことを確認してから、textActiveを呼びましょう
となりますね。
ガッさん返信有難う御座います。
>他のコントロールにフォーカスが移ったことを確認してから、textActiveを呼びましょう
どうしたら移ったと確認してから呼べるのでしょうか
ループを使ってコントロールの名前が変わるのを待って見ましたが
無限ループしてしまって...
度々すみません。どうしたらよいでしょうか?
Set txtControl1 = Me.ActiveControl
Call PostMessage(Me.hWnd, WM_KEYDOWN, VK_TAB, ByVal 0&)
'追加
Do While True
Set txtControl2 = Me.ActiveControl
If txtControl1.Name <> txtControl2.Name Then Exit Do
Loop
KeyAscii = 0 '音を消す
'青く反転させる
textActive Me
>どうしたら移ったと確認してから呼べるのでしょうか
VB6.0 ではフォーカスが移動した時点で TextBox に対して GotFocus
イベントが発生しますので、そのイベントハンドラ内部で呼び出せば
よいかと。
VB.NET だと GotFocus の代わりに Enter を使えばいいのかな?
そこまでは手元に VB.NET がないので分からないのですが。
Geo=TK3さん返信有難う御座います。
イベントハンドラとは気づきませんでした。
GotFocusイベントを使ったのですが上手く行かなかったので
(組み方が悪かったのかな…;;)
LostFocusイベントで処理を行いました。
Private Sub txtControl1_LostFocus()
'フォーマス消失後に今アクティブなControl取得
Set txtControl1 = Me.ActiveControl
textActive Me
End Sub
ガッさん、Geo=TK3さん有難う御座いました。
付け忘れいました。
すみません。
> VB.NET だと GotFocus の代わりに Enter を使えばいいのかな?
合ってます。
VB2002 以降では GotFocus は低水準イベントなので、
Enter イベントを使うようにするべきです。
同様に、LostFocus は Leave イベントになります。
http://jeanne.wankuma.com/tips/textbox/06-onselectall.html
ツイート | ![]() |