早速ですがよろしくお願いします。
・VB6
Validateイベントを使用し、入力チェックをおこなっています。
Cancel=Trueにすればフォーカスがその場にとどまることは
知っていますが、イベント発生時のフォーカスの移動先ではなく
任意の位置にフォーカスを移動することは可能でしょうか??
ためしに
cancel=False
text1.SetFocus '移動させたいTextBox
と作ってみたのですがやはりイベント発生時の移動先になります。
もし何か方法があれば教えていただけないでしょうか。。。
よろしくお願いします。
内から呼んだんじゃだめでしょう。
ちょっとトリッキーな方法ですが、Timerを一つ置いて
Private Sub Text1_Validate(Cancel As Boolean)
Timer1.Interval = 1
Timer1.Enabled = True
End Sub
Private Sub Timer1_Timer()
Timer1.Enabled = False
Text2.SetFocus
End Sub
等とやれば、ほぼやりたい事は出来るような。。。
他に移すのであれば、Cancel を使う意味はないですよね?
たとえば、テキストボックスが10個位有って、
1番目がIDの入力、2番目がパスワード、3番目が名前・・・
起動時は1番目のテキストボックスにフォーカスがあたってる。
1番目のテキストボックスのValidateで入力されたIDをチェックして
そのIDが無ければ、 Cancel = Trueにしてフォーカスを離さない。
IDが有れば、どのテキストが選択されても、強制的に2番目の
テキストボックスにフォーカスを当てる・・・
しかしValidateの中でText2.SetFocusなんてやっても、実際は
選択したテキストボックスにフォーカスが移ってしまう。
こんなことを考えたのですが、スキーマが悪いかな。。。。
遅くなりました!!すみません。
ねろサンありがとうございます。
どうにかValidateの中でやろうとしてたから
目からウロコでした(≧□≦)
じゃんぬねっとサンへ。
ねろサンの2件目のレスと同じようなこと(逆のことかな?)
しようとしてます。
たとえばText2に入力があったときText1に入力がなければ
エラーを発生させ、Text1にフォーカスを与える。
またText2に入力エラーがあった場合、
桁数がmaxまで入力されていない場合にははフォーカスを
ぬけれないようにする。
こんなカンジのプログラムを作ろうとしてます。
すみません。
「解決」忘れてました。。。
なるほど、私は次にフォーカスがいくべき TextBox が Disable で、
Validate を通って初めて Enable になるので、どうにかしたいんだと思っていました。
VB6 では Me.ControlsValidate を使って、色々やってました。
VB.NET 以降では、Me.ActiveControl = 一時的なコントロールで、
検証イベントが発生するので、その位置から Me.SelectNextControl とか。
何か勘違いしていましたね。
ツイート | ![]() |