Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
  • ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:テキストの入力時、カーソルの移動をスムーズにしたい)

テキストの入力時、カーソルの移動をスムーズにしたい

このQ&Aのポイント
  • VB6で複数入力項目(テキスト/コンボボックス等)がある画面を作っているのですが、文字が最大桁数に達したら、次のコンボボックスへカーソル(=フォーカス)を移動し、次の入力項目へを行いたいのですが、どうも思った様に、移動しないです。
  • バックスペースでも1文字分と捉えてしまう様で、3文字入力の場合等は先頭から入力し直さないと、再入力も儘ならない状態です。
  • 何かバックスペースも自然に効く形で同様の制御は行えないものでしょうか。(尚、MaxLength - 1の部分は-1しないとフォーカスが動きませんでした。)

質問者が選んだベストアンサー

  • ベストアンサー
  • BlueRay
  • ベストアンサー率45% (204/453)
回答No.2

>越えた時のキー入力値を次のセルに投入したいのです。 MaxLength=3で、4文字目を入力した時に次へ入力すると言うことでいいのでしょうか。 以下のサンプルは、MaxLength=3で設定していると仮定して、 3文字目を入力するとフォーカスのみを移動。 フォーカスを戻し、4文字目を入力すると入力された値が 次のテキストボックスへ表示されます。 解釈が間違っていたら、再度補足してください。 Private Sub Txt_Input_KeyPress(KeyAscii As Integer) If KeyAscii <> 8 And (KeyAscii < 48 Or KeyAscii > 57) Then KeyAscii = 0 If KeyAscii <> 8 Then 'MaxLengthを超えた時は、キー入力を次へ渡す If Len(Txt_Input.Text) > (Txt_Input.MaxLength - 1) Then Txt_Input2.SetFocus SendKeys "{" & Chr(KeyAscii) & "}" End If 'MaxLengthと同じ時は、フォーカスのみを移動 If Len(Txt_Input.Text) >= (Txt_Input.MaxLength - 1) Then Txt_Input2.SetFocus End If End If End Sub

Adenau
質問者

お礼

 御陰様で上手く行きました。 有難うございました。

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • BlueRay
  • ベストアンサー率45% (204/453)
回答No.1

If Len(Txt_Input.Text) >= (Txt_Input.MaxLength - 1) Then   Txt_Input2.SetFocus End If ↑この処理を、バックスペース以外のときに処理するようにすればどうでしょうか。 If KeyAscii <> 8 Then   If Len(Txt_Input.Text) >= (Txt_Input.MaxLength - 1) Then     Txt_Input2.SetFocus   End If End If

Adenau
質問者

お礼

…"盲点"でした(汗) 一般の画面で動作する様スムーズには行かないものの、動作しますね。 有難うございました。

Adenau
質問者

補足

 出来ればMaxLength値を操作せず、越えた時のキー入力値を次のセルに投入したいのです。現行の場合、MaxLength値を越えると次のセルへフォーカスは移動しますが、キー入力値は持って来られないようです。入力値の一時退避以外の方法で実現の方法を御存知ないでしょうか。

すると、全ての回答が全文表示されます。

関連するQ&A