SSTabでTabが変わった際にTab内のコントロールにValidateを起こさせるには?

解決


あらあら  2004-05-20 10:42:14  No: 113379  IP: [192.*.*.*]

いつも参考にさせていただいています。
つまずいてしまったので助言をいただけないでしょうか?
環境はVB6でOSはWin2000SP4です

SSTab内にテキストボックスが数個あり、このテキストボックスは
Validateによってフォーカスが変わる前に入力値が数値で無かった場合は
エラーになるという入力値検査が行われます。

しかしTabを変更された場合この入力値検査が行われなく、たとえば文字列を
入力した場合でもエラーになってくれません。

tabが変更された場合にこのテキストボックスの入力値検査を行わせるには
どのようにすればよいでしょうか?
また、このテキストボックスの入力審査はValidateイベントで行われなけ
ればならないという条件付です(ココは変えられないんです・・・T_T)

よろしくお願い致します。

編集 削除
特攻隊長まるるう  2004-05-20 11:31:43  No: 113380  IP: [192.*.*.*]

別に… Validate イベントの関数呼び出したら良いだけだと思いますが…

[VB6.0]
Private Sub Command1_Click()
    Call Text1_Validate(False)
End Sub

Private Sub Text1_Validate(Cancel As Boolean)
    MsgBox "エラーチェック"
End Sub

プログラムとしてはエラーチェック関数は別にした方が良いですかねぇ。
[VB6.0]
Private Sub Command1_Click()
    Call ErrCheck
End Sub

Private Sub Text1_Validate(Cancel As Boolean)
    Call ErrCheck
End Sub

Private Function ErrCheck() As Boolean
    MsgBox "エラーチェック"
End Function

編集 削除
特攻隊長まるるう  2004-05-20 13:05:27  No: 113381  IP: [192.*.*.*]

厳密に言えば Validate イベントが起こってるわけではないので
質問に正確に答えようとしてないかなぁ?。直前にいたコントロールの
Validate イベントを発生させるには ValidateControls メソッドを
使ってみて下さい。

編集 削除
あらあら  2004-05-20 13:46:12  No: 113382  IP: [192.*.*.*]

特攻隊長まるるう さん

回答ありがとうございます。
申し訳ありません、質問が下手でした。
実はタブの中のテキストボックスは何個かあり
テキストボックスにはインデックスがつけられています。
その為ただ呼び出すだけだとインデックスが不明な為
Text(n)_Validateがうまく動きませんでした。

ですが、インデックスは何とか取得できる方法がわかったのでいいのですが
今度はエラーを表示しても、エラーを表示した後にタブが変更されてしまう
不具合がでてしまいました。

やりたいことは
SSTab1.tab1からSStab1.tab2に移る前にSStab1.tab1にあるテキストボックス
の数値検査を行いエラーだったらタブの移動は行わないという動作です。

現在はMouseDownのイベントで数値検査を行っていますが、エラーでもタブ
が変わってしまいます。

何か方法をご存知でしょうか。

よろしくお願い致します。

編集 削除
特攻隊長まるるう  2004-05-20 15:01:43  No: 113383  IP: [192.*.*.*]

いつも参考にしてるなら同じような処理は過去にも出てきたと思うけど
…前の書き込みだけで分からなかったです?
まぁ…社交辞令か(^^;)
これではどうです?
[VB6.0]
Option Explicit

Private mEventMusiFlag As Boolean

Private Sub SSTab1_Click(PreviousTab As Integer)
    Dim ThisSetting As String
    If mEventMusiFlag Then Exit Sub
   
    With Me.SSTab1
        Select Case PreviousTab
            Case 0
                MsgBox "0→" & .Tab
                If Not (ErrCheck(Me.Text1)) Then
                    mEventMusiFlag = True
                    .Tab = PreviousTab
                    mEventMusiFlag = False
                End If
            Case 1
                MsgBox "1→" & .Tab
                If Not (ErrCheck(Me.Text2)) Then
                    mEventMusiFlag = True
                    .Tab = PreviousTab
                    mEventMusiFlag = False
                End If
        End Select
    End With
End Sub

Private Sub Text1_Validate(Cancel As Boolean)
    Call ErrCheck(Me.Text1)
End Sub

Private Sub Text2_Validate(Cancel As Boolean)
    Call ErrCheck(Me.Text2)
End Sub

Private Function ErrCheck(ByVal TextBoxX As TextBox) As Boolean
    
    With TextBoxX
        MsgBox "エラーチェック : " & .Text
    End With
    
    If False Then
        ErrCheck = True
    Else
        ErrCheck = False
    End If
    
End Function

編集 削除
あらあら  2004-05-20 19:29:10  No: 113384  IP: [192.*.*.*]

何とか解決しました。
特攻隊長まるるう さんありがとうございます。

確かに似たようなのはあったんですが、どうにも流用できず
悩んでいました。
書いていただきましたサンプルでタブを戻す方法も分かりましたので
非常に助かりました。

ありがとうございます。

編集 削除