• 締切済み

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

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

  • コンボボックス 選択後のカーソル制御

    ACCESS2007のデータベースを利用しています。 テキストボックス1、コンボボックス1、テキストボックス2が上から順に並んでおり、コンボボックス1で表示されるリストから一つを選ぶと、カーソルがテキストボックス2に遷移します。 (ACCESS2007のオプションの詳細設定のところで、フィールド移動時の動作をフィールドの先頭に移動)に設定しています。 コンボボックス1の選択後、コンボボックス1の先頭にカーソル移動するには、どのような処理をVBAに追加すればよいでしょうか? Private Sub コンボボックス1_AfterUpdate() テキストボックス1.SetFocus コンボボックス1.SetFocus With Me!コンボボックス1 .SelStart = 0 .SelLength = 0 End With End Sub ではうまく動作しませんでした。どうぞ宜しくお願い致します。

  • テキストボックス内のカーソル

    使用ソフト:Access2000 使用OS:Windows2000 WindowsXP チェックボックスを押すと、該当するテキストボックスに カーソルを移動するようにしています。 If IsNull(txt処理日) Then txt処理日 = Date End if txt処理日.SetFocus この場合、テキストボックス内に(今日なら、18/03/06)と入り、 すべての数字が選択状態になります。 これを、カーソルが右端に(今日なら、6の右端に)点滅している 状態にするにはどのように変更すればよろしいのでしょうか。

  • テキストボックスにカーソルをもってきたいんです。

    プログラムを起動した時に、テキストボックスにカーソルを置くようにするには、どのようなプログラムになるのでしょうか?よろしくお願いします。

  • テキストボックス 空白確認

    エクセル VBAで コマンドボタンをクリックすると テキストボックスに空白があった場合 空白のテキストボックスにセットフォーカスしたいのですが 下記のように少ない場合は まだいいですが 多くなってきたとき見易さの面でも簡単にしたいのですが VBだとコントロール配列のインデックス値をループ処理 すればよいと思いますがVBAだとどのようにすればいいのでしょうか? Private Sub CommandButton3_Click() If TextBox2 = "" Then TextBox2.SetFocus ElseIf TextBox3 = "" Then TextBo3.SetFocus ElseIf TextBox4 = "" Then TextBox4.SetFocus ElseIf TextBox5 = "" Then TextBox5.SetFocus End If 御願いします。

  • テキストボックス間の移動

    お世話になります。 タイトル通りなのですが、VBAの場合だと、プロパティの ”TabIndex”で可能だと分かるのですが、エクセルの ”コントロールツールボックス”で作成したテキストボックスでは 同様な事は無理なのでしょうか? 状況的にどうしても、このコントロールツールボックで作成した テキストボックスで行わないといけない状態なので。 宜しく御願い致します。

  • テキストボックスにカーソルを固定

    いつもお世話になっています。VB.NETで開発をしているのですが、行き詰まっています。知識をお借りできれば幸いです。(説明が分かり辛く申し訳ありません。) (1) テキストボックスにバーコードを入力し、読込む。 (2) ポストバックがかかった後もそのテキストボックスにカーソルを固定させておくことで、バーコードの連続入力を行いたい。現状は、ポストバック後カーソルがなくなる(クリックし再設定が必要)。 (3) WebFormにテキストボックスを直接作成しているのではなく、ユーザーコントロールのテキストボックスにカーソルを戻したい。 (4) 以下、試みました。aspxのhtmlです。ユーザーコントロールのテキストボックスのInputNameはucA.BarCodeとします。 <HTML>  <HEAD>    ・・・    <script language="javascript">      function SetForcus() {                   ucA.BarCode.focus();                  }    </script>   </HEAD>   <body onload="javascript:SetForcus()" onmousedown="ClickCheck()">   <form id="Form1" method="post" runat="server"> ・・・     <asp:Panel id="pnl" runat="server">  <uc1:A id="ucA" runat="server"></uc1:A>      </asp:Panel>                ・・・   </form>  </body> </HTML>

  • テキストボックスにカーソルを持ってくる方法。

    こんばんわ。お世話になります。 テキストボックスが10個ぐらいあるホームページを作成していますが、そのページを開いた時に、一番、左上にあるテキストボックスにカーソルが点滅している状態(すぐに入力できる状態)にしたいです。 タブインデックスを"1"にしてみても、そのテキストボックスを一度クリックしないと入力できる状態になりません。 誰か知っている人がいたら教えてください。よろしくお願いします。

    • ベストアンサー
    • HTML
  • Word2007でテキストボックスを挿入してもカーソルがでない

    WindowsVista Word2007です。 テキストボックスを挿入したのですが、カーソルが表示されません。 それでも文字を入力すると、2文字目からボックス内に表示されます。 挿入時にカーソルがボックスより左の外に出ているような感じです。(横書きの場合) 2文字目以降はカーソルも表示されています。 縦書きのテキストボックスを挿入しても同じ状況です。 どうしたら直せるのでしょうか? 宜しくお願いします。

  • エディットボックスのカーソルが表示されない

    長いこと悩んでいますが、解決出来ないでいます。 お知恵を拝借したいと思います。 VC5.0, SDK, WinXPでの開発を行っています。 今、リストビューで直接書き込みをさせる為に、 リストビューのクリックされた位置にエディットボックスをかぶせて表示させてあたかも直接編集させているように見せています。 実際のエディットボックスの表示や書き込み等はうまく行っているのですが、表示したエディットボックスにSetFocusをしても、カーソルが表示される場合とされない場合が出てきています。 親画面を表示し、最初にリストビューをクリックした時のエディットボックスにはきちんとカーソルが表示されます。 しかし、2度目以降はまったくカーソルが表示されません。 ただ、フォーカスはあたっているのか、文字入力は正しく行われます。 また、エディットボックスでリターンキーを押されたタイミングでエディットボックスを破棄し、リストビューに文字列を反映させているのですが、このリターンキー押下後にエディットボックスを表示させた時はカーソルも表示されます。 エディットボックスの破棄には、上記リターンキーもしくはエディットボックスからフォーカスが無くなった時に行っているので、 この時の破棄のタイミング等の問題でカーソルが出たり出なかったりしているのだろうと色々調べているのですが、どうしても分かりません。 実際エディットボックスにフォーカスが当たっていればカーソルは自動的に出るものだと思っていたのですが、出ないという現象は何に問題があるのでしょうか? エディットボックス有効処理 Show( SW_SHOW ); BringWindowToTop( hwnd ); SetFocus( hwnd ); エディットボックス破棄(無効)処理 Show( SW_HIDE ); アドバイスを宜しくお願い致します。

  • テキストボックスにフォーカスを当てる?

    こんばんは,すみませんよろしくお願いします。 テキストボックスにフォーカスを当てるには,例えば, TextBox1.SetFocus のようにするんだと思うのですが,テキストボックスに初期値が設定されていたときには,上記のようにすると,初期値のテキストの右側に線のようなポインタがテキストコントロール内にでてきます。 しかし,このような状態では,いったん初期値を消さないと,別の値に書き換えることは出来ません。 テキストコントロール内に初期の値として,何らかのテキストが入力されているとき,文字列が選択された状態になっていれば,即,別の値を入力することが出来ますので,ユーザーフォームをshowしたときに,テキストボックス内の初期値 (例えば,「ここに名前を入力してください」などの文字列) を選択した状態にしたいのです。どのようにすれば良いのでしょうか?何度もすみません。

専門家に質問してみよう