防止文本框递归调用textchanged

时间:2013-07-02 19:41:02

标签: vb.net error-handling textbox

我使用以下代码错误地检查文本框中的用户输入:

Private Sub txtDeadLoadFactor_TextChanged(sender As Object, e As EventArgs) Handles txtDeadLoadFactor.TextChanged
        Dim invalidEntry As Boolean
        If IsNumeric(txtDeadLoadFactor.Text) And Not txtDeadLoadFactor.Text = vbNullString Then
            If Not txtDeadLoadFactor.Text > 0 Then
                invalidEntry = True
            End If
        Else
            invalidEntry = True
        End If
        If invalidEntry Then
            MsgBox("Please only enter numeric data greater than 0 in all fields!", MsgBoxStyle.Critical, "Invalid Input!")
            txtDeadLoadFactor.Text = vbNullString
            invalidEntry = False
        Else
            gDeadLoadFactor = txtDeadLoadFactor.Text
        End If
    End Sub

在无效条目上弹出两次消息框。这是因为将textbox.text设置回nullstring。我不知道如何防止这种情况发生,如果有人可以帮助清理这个凌乱的代码,我们将不胜感激。

谢谢!

2 个答案:

答案 0 :(得分:1)

如果文本等于vbNullString,快速解决方法是离开Sub。把这一行放在Sub的开头:

If txtDeadLoadFactor.Text = vbNullString then Exit Sub

鉴于用户可能会手动清空该框,如果弹出窗口没有验证空字段会更好。

编辑:这个重构的代码可以帮助您:

If txtDeadLoadFactor.Text = vbNullString then Exit Sub
If Not(IsNumeric(txtDeadLoadFactor.Text)) OrElse txtDeadLoadFactor.Text <= 0 then
    MsgBox("Please only enter numeric data greater than 0 in all fields!", MsgBoxStyle.Critical, "Invalid Input!")
    txtDeadLoadFactor.Text = vbNullString
    Exit Sub
End If

gDeadLoadFactor = txtDeadLoadFactor.Text

答案 1 :(得分:0)

为什么要将文本设置为空白?只需将文本原样保留在错误消息框中,这样用户就会知道哪些输入是不允许的,并且如果再次尝试它们将获得相同的结果(即一致性,而如果您更改它们的输入,那么它们会得到当他们再次点击提交时出现不同的错误)。只是我的两分钱。