0

TextBox1.GotFocusイベント関数の最初の行にブレークポイントがあります。

他の場所で呼び出すTextBox1.SetFocusと、GotFocusブレークポイントにヒットすることはありません。なんで?

関数呼び出しのコード: Text1.SetFocus

Private Sub Text1_GotFocus()

   // code here

End Sub
4

1 に答える 1

0

私が何を意味するかを示すための小さなプログラム。

プログラムを実行してフォームをクリックし(キャプションは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は常にフォーカスを新たに「取得」します。

ただし、注意してください。最初に別のコントロールにフォーカスを与えると、望まないかもしれないいくつかの新しいイベントが発生する可能性があるためです。

于 2012-11-26T09:34:21.373 に答える