|
▼おっちゃん さん:
こんにちは。
>>ichinoseさんのKeydownイベント案、こんな使い方なんですね。
>こちらもとても参考になります。
昨日は、ねむくなっちゃって・・・、Setfocusメソッドが言う事を聞いてくれる
KeyDownイベントしか記述しませんでしたが・・・。
実は、おっちゃん さんが なさりたいと思われる仕様はこれだけでは
不十分なんです。
KeyDownイベントは、あくまでキーを押したときに発生するイベントです。
仮に前回のコードでTextbox1に"1"を入力した後にマウスでTextbox6をクリックした場合
KeyDownイベントは発生しません(おそらくは、これではおっちゃん さんの仕様と違うのでは??)。
Userformのテキストボックスを使用して一般的なアプリのような動作をさせるのは
簡単ではないという前置きをして・・・。
以下のようなコードを試してみて下さい。
おっちゃん さんの最初の投稿にあるようなユーザーフォーム(Userform1)を考えます。
テキストボックスは、Textbox1〜Textbox9として
このユーザーフォームのモジュールに
'=================================================================
Private t1_ev_flg As Long
'0: イベントは実行されていない
'1: Keydownが実行された
'=================================================================
Private Sub UserForm_Initialize()
t1_ev_flg = 0
End Sub
'======================================================================
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
Select Case KeyCode
Case 13, 9 'EnterキーとTabキー
t1_ev_flg = 1
With TextBox1
If 検索(.Text) = True Then '実際にはここを電話番号を検索した結果で分岐する
TextBox5.SetFocus
End If
End With
Case 40
KeyCode = 0
End Select
End Sub
'================================================================
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If t1_ev_flg = 0 Then 'Keydownイベントが発生していない場合
Call 検索(TextBox1.Text)
End If
t1_ev_flg = 0
End Sub
'================================================================
Function 検索(txt) As Boolean
'ここには、実際は電話番号(Textbox1)での検索処理を記述します
'結果として、見つかったか、見つからなかったかをTrue、Falseで呼び出し
'側に返します。
'ここでは、簡単に"1"だったらTrue、それ以外Falseにしました
'また、"1"のときは、
' Textbox2〜Textbox4には、名前や住所の代わりに"aaa"がセットされます
Dim mes As String
検索 = False
If txt = "1" Then
mes = "aaa"
検索 = True
Else
mes = ""
End If
For idx = 2 To 4
Controls("textbox" & idx).Text = mes
Next
End Function
上記のようにしておくとTextbox1に"1"が指定されて、マウスで例えば
Textbox7がクリックされてもTextbox2〜Textbox4に検索した結果が
表示されるはずです。
>どう勉強されたのですか?
このサイトで回答投稿をする事で勉強しました、いえ、今も勉強中です。
これは、私個人の考えですが、とにかく、他人のコードをたくさん読むことは
おすすめです。それをHELPやこういう質問箱を使いながら解読していく。
それと何でもいいからご自分で仕様をきめてひとつ完成品をつくることですよ。
|
|