[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2007/01/04(Thu) 15:55
投稿者名:こう
Eメール:
URL :
タイトル:
エラーが発見されたテキストボックスへのフォーカスの移動
フォームにテキストボックスが10個あります。各テキスト
ボックスに入力された文字のチェックを行い、入力できない
文字が存在した場合、テキストボックスの背景色の変更と該当
のテキストボックスへフォーカスを設定しています。

すべのテキストボックスをチェック後、複数のテキストボックス
がエラーの対象となった場合、最初に見つかった(エラーが発見
された)テキストボックスにフォーカスを移動させたいのですが、
どのようにすればよいのですか。

つまり、すべてのテキストボックスをチェックした後、最初に
見つかったテキストボックスにフォーカスを設定したいのですが
どうすればよいのですか。

背景色を変えるのは、入力できない文字が見つかった時点で
設定できます。また、この時、合わせてフォーカスを設定する
と、結局は、一番最後に見つかったテキストボックスになって
しまう。


/*--------------------------------------------------*/
Private Sub Command1_Click()
    If ChkTextBox <> True Then
        Exit Sub
    End If
End Sub

Private Function ChkTextBox() As Boolean
    Dim chk_flg As Boolean

    ChkTextBox = True
    chk_flg = True

    If ChkKinsokuChr(Text1) = False Then chk_flg = False
    If ChkKinsokuChr(Text2) = False Then chk_flg = False
    If ChkKinsokuChr(Text3) = False Then chk_flg = False
    If ChkKinsokuChr(Text4) = False Then chk_flg = False
    If ChkKinsokuChr(Text5) = False Then chk_flg = False
    If ChkKinsokuChr(Text6) = False Then chk_flg = False
    If ChkKinsokuChr(Text7) = False Then chk_flg = False
    If ChkKinsokuChr(Text8) = False Then chk_flg = False
    If ChkKinsokuChr(Text9) = False Then chk_flg = False
    If ChkKinsokuChr(Text10) = False Then chk_flg = False

    If chk_flg = False Then
        ChkTextBox = False
        MsgBox "入力できない文字が存在します。再入力して下さい。"
        Exit Function
    End If
End Function

Private Function ChkKinsokuChr(ByVal MyTextBox As TextBox) As Boolean
    Dim I    As Integer

    ChkKinsokuChr = True

    チェック処理
    背景色の変更処理
    etc
End Function

投稿時間:2007/01/04(Thu) 16:44
投稿者名:
Eメール:
URL :
タイトル:
Re: エラーが発見されたテキストボックスへのフォーカスの移動
簡単に対応するなら『逆順でエラーチェックする』ですかね?

投稿時間:2007/01/04(Thu) 17:36
投稿者名:こう
Eメール:
URL :
タイトル:
Re^2: エラーが発見されたテキストボックスへのフォーカスの移動
> 簡単に対応するなら『逆順でエラーチェックする』ですかね?

逆順からチェックすれば、確かに、一番最後に見つかったのが、
一番最初に見つかったになりますね。
また、フォーカスの設定とかも見つかった時点で設定すれいば
いいだけですね。

投稿時間:2007/01/04(Thu) 19:47
投稿者名:7-2/1
Eメール:
URL :
タイトル:
Re^3: エラーが発見されたテキストボックスへのフォーカスの移動
テキストボックスが配列だったら、index番号を退避すれば
逆順でなくてもできますね。
あとは、テキストボックスのオブジェクトを退避しておくとか。

オブジェクトって退避できたんでしかけ。

投稿時間:2007/01/04(Thu) 23:51
投稿者名:こう
Eメール:
URL :
タイトル:
Re^4: エラーが発見されたテキストボックスへのフォーカスの移動
逆順ではなく、指定した順でチェックして一番最初に
エラーになったところにフォーカスを設定したいの
ですが、

投稿時間:2007/01/05(Fri) 01:54
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^5: エラーが発見されたテキストボックスへのフォーカスの移動
下記のような感じにフラグを設定してできませんか?

Private ErrNo1TextBox As TextBox
--------------------------------------
    If chk_flg = False Then
        ChkTextBox = False
        MsgBox "入力できない文字が存在します。再入力して下さい。"
    ErrNo1TextBox.SetFocus
        Exit Function
    End If
End Function

Private Function ChkKinsokuChr(ByVal MyTextBox As TextBox) As Boolean
    Dim I    As Integer

    ChkKinsokuChr = True

    チェック処理
    背景色の変更処理

    If ErrNo1TextBox Is Nothing And ChkKinsokuChr = False Then
      Set ErrNo1TextBox = MyTextBox
    End If

    etc
End Function

投稿時間:2007/01/05(Fri) 12:58
投稿者名:こう
Eメール:
URL :
タイトル:
Re^6: エラーが発見されたテキストボックスへのフォーカスの移動
> 下記のような感じにフラグを設定してできませんか?
>
出来ます。
上手く行きました。

テキストボックスそのものを代入するときは、
「Set ErrNo1TextBox = MyTextBox」
と書くですね。
抜けていました。

以前、代入しようとやっていたのですが、
「Set」を忘れていたのであきらめていました。