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しないとフォーカスが動きませんでした。)
>越えた時のキー入力値を次のセルに投入したいのです。
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
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
お礼
御陰様で上手く行きました。 有難うございました。