Validateイベント発生時、フォーカスの移動先の変更

解決


ぐっち  2005-06-21 16:54:36  No: 90579  IP: [192.*.*.*]

早速ですがよろしくお願いします。

・VB6

Validateイベントを使用し、入力チェックをおこなっています。
Cancel=Trueにすればフォーカスがその場にとどまることは
知っていますが、イベント発生時のフォーカスの移動先ではなく
任意の位置にフォーカスを移動することは可能でしょうか??

ためしに

     cancel=False
     text1.SetFocus '移動させたいTextBox

と作ってみたのですがやはりイベント発生時の移動先になります。

もし何か方法があれば教えていただけないでしょうか。。。
よろしくお願いします。

編集 削除
ねろ  2005-06-21 17:45:11  No: 90580  IP: [192.*.*.*]

内から呼んだんじゃだめでしょう。
ちょっとトリッキーな方法ですが、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
等とやれば、ほぼやりたい事は出来るような。。。

編集 削除
じゃんぬねっと  URL  2005-06-21 18:30:01  No: 90581  IP: [192.*.*.*]

他に移すのであれば、Cancel を使う意味はないですよね?

編集 削除
ねろ  2005-06-21 21:09:30  No: 90582  IP: [192.*.*.*]

たとえば、テキストボックスが10個位有って、
1番目がIDの入力、2番目がパスワード、3番目が名前・・・
起動時は1番目のテキストボックスにフォーカスがあたってる。
1番目のテキストボックスのValidateで入力されたIDをチェックして
そのIDが無ければ、 Cancel = Trueにしてフォーカスを離さない。
IDが有れば、どのテキストが選択されても、強制的に2番目の
テキストボックスにフォーカスを当てる・・・
しかしValidateの中でText2.SetFocusなんてやっても、実際は
選択したテキストボックスにフォーカスが移ってしまう。
こんなことを考えたのですが、スキーマが悪いかな。。。。

編集 削除
ぐっち  2005-06-21 21:32:56  No: 90583  IP: [192.*.*.*]

遅くなりました!!すみません。

ねろサンありがとうございます。
どうにかValidateの中でやろうとしてたから
目からウロコでした(≧□≦)

じゃんぬねっとサンへ。
ねろサンの2件目のレスと同じようなこと(逆のことかな?)
しようとしてます。

たとえばText2に入力があったときText1に入力がなければ
エラーを発生させ、Text1にフォーカスを与える。
またText2に入力エラーがあった場合、
桁数がmaxまで入力されていない場合にははフォーカスを
ぬけれないようにする。

こんなカンジのプログラムを作ろうとしてます。

編集 削除
ぐっち  2005-06-22 08:52:05  No: 90584  IP: [192.*.*.*]

すみません。
「解決」忘れてました。。。

編集 削除
じゃんぬねっと  URL  2005-06-22 09:28:01  No: 90585  IP: [192.*.*.*]

なるほど、私は次にフォーカスがいくべき TextBox が Disable で、
Validate を通って初めて Enable になるので、どうにかしたいんだと思っていました。
VB6 では Me.ControlsValidate を使って、色々やってました。
VB.NET 以降では、Me.ActiveControl = 一時的なコントロールで、
検証イベントが発生するので、その位置から Me.SelectNextControl とか。

何か勘違いしていましたね。

編集 削除