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

解決


ぐっち  2005-06-22 01:54:36  No: 90579

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

・VB6

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

ためしに

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

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

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


ねろ  2005-06-22 02:45:11  No: 90580

内から呼んだんじゃだめでしょう。
ちょっとトリッキーな方法ですが、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-22 03:30:01  No: 90581

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


ねろ  2005-06-22 06:09:30  No: 90582

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


ぐっち  2005-06-22 06:32:56  No: 90583

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

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

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

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

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


ぐっち  2005-06-22 17:52:05  No: 90584

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


じゃんぬねっと  URL  2005-06-22 18:28:01  No: 90585

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

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


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

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






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