• ベストアンサー

テキストボックスの入力可/不可を切り替えた場合のリターンキーでの移動について

VB6でマスタメンテ系のプログラムを作っています。 あるテキストボックスの内容によって、その次のテキストボックスの 入力可/不可を切り替えているのですが、1つ目のテキストボックス に値を入力してリターンキーで移動すると、次のテキストボックスが 入力可であっても、タブはそれを飛ばしてその次の項目に位置づいて しまいます。1つ目のテキストボックスに入力した後、イベントを 拾って、SetFocusか何かしてやらないといけないのでしょうか? 2つ目のテキストボックスに位置付ける方法があれば、アドバイス いただければと思います。よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

Private Sub Text1_Change() Select Case Text1 Case "1" Text2.Enabled = False Text3.Enabled = True Case "2" Text2.Enabled = True Text3.Enabled = False Case Else Text2.Enabled = True Text3.Enabled = True End Select End Sub Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer) If (KeyCode = 13) Then If (Text1 = "1") Then Text3.SetFocus Else Text2.SetFocus End If End If End Sub というのはどうでしょう? No.2の方の方法は、Text1入力時に、マウスで例えば終了ボタンを押すと終了できません。 LostFocusイベントでなく、Validateイベントで記述した方がいいのでは?

mayurin
質問者

お礼

お返事ありがとうございます。 No.2の方法を試してみたのですけど、他のコントロールとの 相性(?)が悪くて暴走しちゃうのでアウトでした。 たぶん、コントロールの方がおかしいようです。 (ステップ実行だと上手くいくんですけど、exeだとダメなんです。) 上記の方法もチャレンジしてみますね。

その他の回答 (3)

  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.4

>相性(?)が悪くて暴走しちゃうのでアウトでした。 >たぶん、コントロールの方がおかしいようです。 >(ステップ実行だと上手くいくんですけど、exeだとダメなんです。) コマンドボタン・オプションボタン・ラジオボタン・タブコントロール などは、全てのキーイベントを発生させるわけではありません。 ステップ実行だと、プログラムで書いた命令だけが実行され、VBのバグは隠れます。 だから思うような結果が得られます・・・^^; さらに上記のコントロール類はTABINDEXを無視した順番にフォーカスが当たる原因となります。 他のスレにも書いたのですが、VB任せのフォーカス順ははっきり言ってお勧めできないと思っております。 それと#3さんが言われているLostFocusイベントでセットフォーカスイベントを発生させるのは・・・フォーカス無限ループになる要素が強いような・・・ GotFocusで操作するのであれば、LostFocusにはSotFocusを書き込まないなどのルールを決めないと、マウス操作でフォーカスを移動したときに怖い思いをするような気がします。現在の状況では、運用カバーでしか・・・ APIが可能であればSetWindowsHookExで・・・点々々

参考URL:
http://oshiete1.goo.ne.jp/kotaeru.php3?q=199683
mayurin
質問者

お礼

お返事ありがとうございます。 Focusをいじるのは、いろいろ無限ループの可能性が出てくるんですね。 勉強になりました。 結局。。。 keydownでは、Enterキーが取得できず(取得できない条件にはなってない はずなんですけど、これもユーザーコントロールのせいかも?)、 SetFocusが書けなかったのですが、changeイベントでEnableを切り替えた 後は、TabIndexにお任せすると何とか思ったようになりました。 みなさま、ありがとうございました。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

>値を入力してリターンキーで移動すると >タブはそれを飛ばして textboxは「エンタキーを押した」というイベントはありましたっけ。私はそれがあれば良いなといつも思っているのですが。それと「タブは」とはどういう関連ですか ともあれ(1)別のボタン等をクリックしたときにTextの 値を取る(2)別のTextも含めLostFocusで採るしかないのでは。 Private Sub Text1_LostFocus() If Text1.Text = "1" Then Text2.Text = "" Text2.Enabled = False Text3.SetFocus Else Text2.Enabled = True Text2.Text = "" Text2.SetFocus End If End Sub

mayurin
質問者

お礼

お返事ありがとうございます。 「タブ」はカーソルのことを言ったつもりでした。 要は、1つめの項目が1なら2つめの項目が入力可、2なら2つめの項目は 入力不可という処理をしていて、2つめの項目が入力不可状態だったときに 1つめの項目に1を指定しても、入力してリターンキーを押すと2つめの項目 は入力可の状態にはなるものの、カーソルはそれを飛ばして3つめに行って しまうんですよね。それを何とか2つめに行かせたいと・・・。 アドバイスしてもらった方法を試してみますね。

  • ittochan
  • ベストアンサー率64% (2667/4137)
回答No.1

TabIndex プロパティで順番を決めてあげてはどうでしょう。

mayurin
質問者

お礼

お返事ありがとうございます。 TabIndexの順番は設定しているのですけど、直前まで入力不可の項目 だったためか、タブストップしてくれないんです。

関連するQ&A