0

10 以上のテキスト ボックスと 1 つのボタンを含むフォームがあります。すべてのテキスト ボックスが 10 または 13 の長さの数値で満たされるまで、リアルタイム検証でボタンを無効にしたいと考えています。これまでのコードは次のとおりです。

Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load
    For Each userID As Control In Me.Controls.OfType(Of TextBox)()
        AddHandler userID.TextChanged, AddressOf ValidateAllFields
    Next userID
End Sub
Private Sub userID_KeyPress(ByVal sender As Object, ByVal e As KeyPressEventArgs) Handles Me.KeyPress
    If e.KeyChar <> ChrW(Keys.Back) Then
        If Char.IsNumber(e.KeyChar) Then
        Else
            e.Handled = True
        End If
    End If
End Sub
Private Function ValidateAllFields()
    Dim Validation As Boolean = True
    For Each userID As Control In Me.Controls.OfType(Of TextBox)()
        Dim e As New System.ComponentModel.CancelEventArgs
        e.Cancel = False
        Call userID_Validating(userID, e)
        If e.Cancel = True Then Validation = False
    Next userID
    buttonSave.Enabled = Not Me.Controls.OfType(Of TextBox).Any(Function(userID) userID.Text.Length <> 10 AndAlso userID.Text.Length <> 13)
    Return Validation
End Function
Private Sub userID_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles _
    user00.Validating, _
    user01.Validating, _
    user02.Validating, _
    user03.Validating, _
    user04.Validating, _
    user05.Validating, _
    user06.Validating, _
    user07.Validating, _
    user07.Validating, _
    user08.Validating, _
    user09.Validating, _
    user10.Validating, _
    user11.Validating
    If Not IsNumeric(sender.Text) OrElse (sender.Text.Length <> 10) AndAlso (sender.Text.Length <> 13) Then
        ErrorProvider1.SetError(sender, "")
        ErrorProvider2.SetError(sender, "Please enter a valid User ID.")
        e.Cancel = True
    Else
        ErrorProvider1.SetError(sender, "Valid User ID.")
        ErrorProvider2.SetError(sender, "")
    End If
End Sub

あなたの助けのおかげで、私が望んでいたように動作しますが、改善/クリーンアップを手伝ってもらえますか? 私はまだvbを勉強しています。どんな提案も受け付けています。前もって感謝します!

4

2 に答える 2

0

ここに、必要なアクションを実行するコードがあります。

Dim done1, done2, done3 As Boolean
Dim targetLength1 As Integer = 10
Dim targetLength2 As Integer = 13
Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
    Try
        If (IsNumeric(TextBox1.Text)) Then
            If (TextBox1.Text.Length = targetLength1 Or TextBox1.Text.Length = targetLength2) Then
                done1 = True
            End If
        End If
        If (done1 And done2 And done3) Then
            Button1.Enabled = True
        End If
    Catch ex As Exception

    End Try
End Sub

Private Sub TextBox2_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox2.TextChanged
    Try
        If (IsNumeric(TextBox2.Text)) Then
            If (TextBox2.Text.Length = targetLength1 Or TextBox2.Text.Length = targetLength2) Then
                done2 = True
            End If
        End If
        If (done1 And done2 And done3) Then
            Button1.Enabled = True
        End If
    Catch ex As Exception

    End Try
End Sub

Private Sub TextBox3_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox3.TextChanged
    Try
        If (IsNumeric(TextBox3.Text)) Then
            If (TextBox3.Text.Length = targetLength1 Or TextBox3.Text.Length = targetLength2) Then
                done3 = True
            End If
        End If
        If (done1 And done2 And done3) Then
            Button1.Enabled = True
        End If
    Catch ex As Exception

    End Try
End Sub

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    Button1.Enabled = False
End Sub

これは 3 つのテキストボックス ( TextBox1TextBox2およびTextBox3) と 1 つのボタン ( Button1) だけを占めていますが、必要な数のテキストボックスにアイデアを拡張できます。各テキストボックスの TextChanged にも依存しています。条件が満たされると (テキスト ボックスに長さが 10 または 13 の数値がある場合)、対応するフラグが true に設定されます (たとえば、TextBox1 の場合は done1...)。すべてのフラグが true の場合 (すべてのテキスト ボックスに期待される情報が含まれている場合)、ボタンは無効になります。

于 2013-07-03T11:28:08.080 に答える