電子書籍の厳選無料作品が豊富!

 VB6で複数入力項目(テキスト/コンボボックス等)がある画面を作っているのですが、文字が最大桁数に達したら、次のコンボボックスへカーソル(=フォーカス)を移動し、次の入力項目へを行いたいのですが、
どうも思った様に、移動しないです。
 以下は半角数字項目が最大文字数に達した場合、次のインプットボックスへフォーカスが移動する様に組んでみました。

Private Sub Txt_Input_KeyPress(KeyAscii As Integer)
If KeyAscii <> 8 And (KeyAscii < 48 Or KeyAscii > 57) Then KeyAscii = 0
If Len(Txt_Input.Text) >= (Txt_Input.MaxLength - 1) Then
Txt_Input2.SetFocus
End If
End Sub

ところが、バックスペースでも1文字分と捉えてしまう様で、3文字入力の場合等は先頭から入力し直さないと、再入力も儘ならない状態です。
何かバックスペースも自然に効く形で同様の制御は行えないものでしょうか。
(尚、MaxLength - 1の部分は-1しないとフォーカスが動きませんでした。)

A 回答 (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
    • good
    • 0
この回答へのお礼

 御陰様で上手く行きました。

有難うございました。

お礼日時:2003/10/20 15:39

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

この回答への補足

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

補足日時:2003/10/20 11:47
    • good
    • 0
この回答へのお礼

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

お礼日時:2003/10/20 11:46

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!