TextBox1.GotFocus
イベント関数の最初の行にブレークポイントがあります。
他の場所で呼び出すTextBox1.SetFocus
と、GotFocus
ブレークポイントにヒットすることはありません。なんで?
関数呼び出しのコード: Text1.SetFocus
Private Sub Text1_GotFocus()
// code here
End Sub
私が何を意味するかを示すための小さなプログラム。
プログラムを実行してフォームをクリックし(キャプションは1のまま)、Text2をクリックしてフォーカスを与え、フォームをもう一度クリックします(キャプションは2に変わります)
次に、Form_ClickでText2.SetFocusのコメントが解除されている間も同じようにします。
ここにコードがあります:
'1 form with
' textbox : name=Text1 tabindex=0
' textbox : name=Text2 tabindex=1
Option Explicit
Private Sub Form_Click()
'uncomment the following line to make it work
' Text2.SetFocus
'with just the following call this wont work
Text1.SetFocus
End Sub
Private Sub Text1_GotFocus()
'increase the number in the form caption to show text1 got the focus again
Caption = CStr(Val(Caption) + 1)
End Sub
プログラムが起動すると、Text1がフォーカスを取得し(tabindex = 0)、フォームをクリックするとフォームのキャプションが1に変わります。これは、Text1がすでにフォーカスを持っており、最初にText2をクリックしてから「取得」しなかったためです。フォームをクリックすると、フォームのキャプションが増加します
Text2.SetFocusで行のコメントを解除することにより、フォーカスをText1に移動する前に、プログラムが常にフォーカスをText2に移動するようにします(まだ存在しない場合)。そのため、Text1は常にフォーカスを新たに「取得」します。
ただし、注意してください。最初に別のコントロールにフォーカスを与えると、望まないかもしれないいくつかの新しいイベントが発生する可能性があるためです。