電子書籍の厳選無料作品が豊富!

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

A 回答 (4件)

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イベントで記述した方がいいのでは?
    • good
    • 0
この回答へのお礼

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

お礼日時:2002/09/26 20:43

>相性(?)が悪くて暴走しちゃうのでアウトでした。


>たぶん、コントロールの方がおかしいようです。
>(ステップ実行だと上手くいくんですけど、exeだとダメなんです。)

コマンドボタン・オプションボタン・ラジオボタン・タブコントロール
などは、全てのキーイベントを発生させるわけではありません。
ステップ実行だと、プログラムで書いた命令だけが実行され、VBのバグは隠れます。
だから思うような結果が得られます・・・^^;

さらに上記のコントロール類はTABINDEXを無視した順番にフォーカスが当たる原因となります。
他のスレにも書いたのですが、VB任せのフォーカス順ははっきり言ってお勧めできないと思っております。

それと#3さんが言われているLostFocusイベントでセットフォーカスイベントを発生させるのは・・・フォーカス無限ループになる要素が強いような・・・
GotFocusで操作するのであれば、LostFocusにはSotFocusを書き込まないなどのルールを決めないと、マウス操作でフォーカスを移動したときに怖い思いをするような気がします。現在の状況では、運用カバーでしか・・・

APIが可能であればSetWindowsHookExで・・・点々々

参考URL:http://oshiete1.goo.ne.jp/kotaeru.php3?q=199683
    • good
    • 0
この回答へのお礼

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

お礼日時:2002/09/27 20:38

>値を入力してリターンキーで移動すると


>タブはそれを飛ばして
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
    • good
    • 0
この回答へのお礼

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

お礼日時:2002/09/25 10:48

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

    • good
    • 0
この回答へのお礼

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

お礼日時:2002/09/25 10:36

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!