コントロールのフォーカスを自動移動するには


さば  2005-04-13 22:45:06  No: 120894

お世話になっております。

VB6でフォーム上に、
  テキストボックス3つ
  ボタン配列2つ
を配置し、ボタンが押されたらボタンインデクスをテキスト表示して
次のテキストボックスへとフォーカスを移動するようなプログラムを
考えています。

TextX_GotFocusでテキストボックスのオブジェクトを記憶しておき、
Command_Clickでオブジェクトを判定してSetFocusでフォーカスを移動
しています。

ボタンが1つだと動くようなのですが、2つ以上にしてインデクスを
表示させた途端、予期しないテキストボックスがアクティブになりま
す。

様々なサイトを参照したのですが、解決できません。
解決策をご存じの方、できれば具体的にご指摘いただきたいのですが。


さるべーじ  2005-04-14 01:47:24  No: 120895

うーん。
これだけの質問文ですと、単純なプログラムミスの可能性が一番高いように思えます。

ので、まずは当該の現象が再現する最低限のコードを
提示してみてはいかがでしょうか。

・現時点のソースコードをそのまま提示するのはやめた方がいいです。
  たぶんそれなりに大きなものでしょうから、読む方がヒイてしまう可能性大です。

・必要最低限のコードを書いたら、必ず動作を確認してから提示しましょう。
  もしそのコードでは現象が再現しないなら、そのコードと元のコードの
  違いを比較してみましょう。
  意外と、その時点で原因→解決策が見つかることもよくあります。


さば  2005-04-14 04:55:15  No: 120896

どうも舌足らずで失礼しました。
テストに使用したコードを提示いたします。
自分が見たところでは、明らかにココがバグというところを見つけられ
ないですが。
よろしくお願いいたします。

-----------------------------------------------------------------
Private lpc As Control

Private Sub Command1_Click(Index As Integer)
   Select Case lpc
   Case Text1
       Set lpc = Nothing
       Text1.Text = Str(Index)

       Text2.SetFocus
       Text2.SelStart = 0
       Text2.SelLength = Len(Text2.Text)
   Case Text2
       Set lpc = Nothing
       Text2.Text = Str(Index)

       Text3.SetFocus
       Text3.SelStart = 0
       Text3.SelLength = Len(Text3.Text)
   Case Text3
       Set lpc = Nothing
       Text3.Text = Str(Index)

       Text3.SetFocus
       Text3.SelStart = 0
       Text3.SelLength = Len(Text3.Text)
   End Select
End Sub

Private Sub Text1_GotFocus()
   Set lpc = Text1
End Sub

Private Sub Text2_GotFocus()
   Set lpc = Text2
End Sub

Private Sub Text3_GotFocus()
   Set lpc = Text3
End Sub
-----------------------------------------------------------------


みい  2005-04-14 06:11:55  No: 120897

Case Text3
       Set lpc = Nothing
       Text3.Text = Str(Index)

※       Text3.SetFocus
※       Text3.SelStart = 0
※       Text3.SelLength = Len(Text3.Text)
   End Select
※部は移す時に打ち間違ただけ?それとも…


さば  2005-04-14 06:34:30  No: 120898

Text3が1,2,3と来て、最後のテキストボックスなのですが、
そこからフォーカスを動かさないために、text2の場合と同じにしています。
よろしくおねがいします。


特攻隊長まるるう  2005-04-14 06:35:09  No: 120899

ただの理解不足と勘違いとデバッグして
ないだけだと思う。

Command1_Click の中で SetFocus してる
あとの動きが予想と違うとか言ってるん
じゃないの?
要所要所に
Debug.Print("適当な行数とか")
を入れてイベントがどの時点で処理されて
いるかちゃんとデバッグすれば解決しそう
な気がします。


。。。  2005-04-14 20:11:48  No: 120900

最初に断ってない時点で、回答する気は失せる。
http://forums.belution.com/ja/vb/000/011/84s.shtml


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加