• 締切済み

テキストボックスとカーソルの制御

30個のテキストボックスがある画面で、 tabindexにはそれぞれのテキストボックス1~30と 同じインデックスが振られています。 例としてテキストボックス1に入力した時、 エラーメッセージを出して、 OKを返したらテキストボックス2にカーソルが行かないで、 テキストボックス1に戻るようにするには どのようにすれば良いでしょうか? 但しSetfocusでは無く、エラーが発生した テキストボックスにカーソルが戻った時に、 他のテキストボックスをクリック又はTabを押した時に、 カーソルが遷移するように、カーソルを自由にコントロール 出来るようにしたいのですが。 注文が多くなってしまいましたが、書き込みをお待ちしております。

みんなの回答

  • ryoukun
  • ベストアンサー率38% (16/42)
回答No.4

No.3の補足です。 入力チェックは、LostFocusでは無く、Validateイベントで行って下さい。 Validateイベントは、TextBoxのCausesValidationプロパティがTrueに成っていれば(通常は、デフォルトでTrue)、LostFocusとほぼ同じタイミングで発生します。ただし、微妙な違いが有ります。 通常、マウスorTabキー等で、カーソル操作をしている分には差は出ないのですが、 CommandButtonにニーモニック文字をつけて(例えば&Saveなど)、Alt+ニーモニック文字を押した時(例では、Alt+s)、LostFocusより先にComanndのClickイベントが発生してしまいます。 Validateは、Clickイベントより先に発生しますので、確実にチェックできます。 それと、SetFocusをやった時に、GotFocusが発生してしまい、No.3で書いた変更有無のチェックが正しく出来なくなります。 それから、LostFocusだと、一度他にフォーカスが行っているので、次のTextなどに一瞬カーソルが表示されますが、Validateはフォーカスを移す前に発生するので、カーソルがちらつく事もありません。 後は、SetFocusの変わりに、Validateの引数にTrueを返せば、フォーカスは移動しません。

  • ryoukun
  • ベストアンサー率38% (16/42)
回答No.3

>SetFocusを使うと、tabやクリックで >カーソルが他の入力箇所に移せませんでした。 >それだと自由に操作が出来なくなるので >不便だなと思ったので。 >SetFocusを使っても、移せる方法は >あるのでしょうか? それは、SetFocusが悪いのではなく、LostFocusで無条件にチェックしているからではないでしょうか? 解決方法としては、Changeでチェックすることも出来ますが、これは1文字単位でイベントが発生したと思うので、GotFocusでTextの内容を変数に取り込んで、LostFocus時に、変数とTextを比較して、変更が有った時だけ、入力チェックをすればいいと思います。

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

参考にならないでしょうか?

参考URL:
http://oshiete1.goo.ne.jp/kotaeru.php3?q=367446
  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.1

こんにちは。maruru01です。 TabIndexを指定して、TabStopをTrueにしておけば、TabやEnterで普通に移動出来ますよね。 で、エラーメッセージを出すというのは、テキストボックスのどのイベントでのことでしょうか。 ChangeやClickイベントなら、元々そのテキストボックスにフォーカスがあるままなはずですが。 エラーが出ない場合は、自動的に次のテキストボックスに移動することになっているのでしょうか。 それと、何故SetFocusを使わないのでしょうか。 もう少し分かり易くするか、出来る範囲でコードを載せるかして下さい。

usi-iti
質問者

お礼

回答ありがとうございます。 エラーメッセージは、テキストボックスに 入力されたものを判定して、入力項目として 間違っていた場合返す、というものです。 イベントはlost focusで行っています。 >何故SetFocusを使わないのでしょうか。 SetFocusを使うと、tabやクリックで カーソルが他の入力箇所に移せませんでした。 それだと自由に操作が出来なくなるので 不便だなと思ったので。 SetFocusを使っても、移せる方法は あるのでしょうか?

関連するQ&A