0

我希望你们能帮助解决一个应该很容易解决的问题,我只是在寻找解决方案时遇到了问题。在我正在编写的程序中,一些文本框必须是 1 到 10 之间的数字,而其他文本框必须是数字。我决定为每个文本框编写方法,而不是编写每个文本框来验证这些参数。我在传递参数并使其正常运行时遇到问题。包括我的一些代码,这些代码显示了我想要完成的事情。

 Public Shared Sub checkforonetoten(ByVal onetoten As Double)
    If (onetoten > 1 & onetoten < 10) Then
    Else
        MessageBox.Show("Please enter a Number between 1-10", "Error")
    End If
End Sub

Public Shared Sub checkfornumber(numCheck As Double)
    Dim numericCheck As Boolean
    numericCheck = IsNumeric(numCheck)

    If (numericCheck = False) Then
        MessageBox.Show("Please enter a number", "Error")
    End If
End Sub

Private Sub textboxS_TextChanged(sender As Object, e As EventArgs) Handles textboxS.TextChanged
    Dim S As Double
    S = textboxS.Text
    checkfornumber(S)
    checkforonetoten(S)
End Sub
4

2 回答 2

1

您的主要问题之一是您在没有验证的情况下转换文本。您还在编程时没有使用 Options On 来警告您在事件处理程序中使用的不良转换技术。

TryParse 方法在这里会派上用场:

Private Sub textboxS_TextChanged(sender As Object, e As EventArgs) Handles textboxS.TextChanged
    Dim S As Double
    If Double.TryParse(textboxS.Text, S) Then
        checkforonetoten(S)
    End If
End Sub

由于 TryParse 方法会验证您的文本并将值设置为“S”,因此您只需检查范围。

当然,使用 NumericUpDown 控件会使这一切变得毫无意义,因为值将始终只是数字,您可以设置每个值的范围。

于 2013-10-20T23:37:02.503 回答
0

构造它的一种方法是让一个事件过程处理类似的 TB 类型:

Private Sub textboxS_TextChanged(sender As Object, e As EventArgs) _
    Handles textbox1.TextChanged, textbox12.TextChanged, _
    Handles textbox16.TextChanged

    Dim S As Double
    If Double.TryParse(Ctype(sender, TextBox).Text, S) Then
        ' or place the Check code here for all the TextBoxes listed above

        checkforonetoten(S)

   End If
End Sub

普通数字类型:

Private Sub textboxQ_TextChanged(sender As Object, e As EventArgs) _
    Handles textbox2.TextChanged, textbox6.TextChanged

    Dim S As Double
    If Double.TryParse(Ctype(sender, TextBox).Text, S) = False Then

       MessageBox.Show("Please enter a number", "Error")

   End If
End Sub

与其调用函数并从事件中传递当前的 TextBox(这很好),不如让 2 或 3 个事件来处理它们。关键是将子句添加/移动Handles到一个公共事件过程中(一定要删除旧的)。

如果您决定调用一个通用函数,请不要在事件中执行任何操作(每个 TB 仍然有一个)并在通用 proc 中执行所有操作:

  Private Sub textboxS_TextChanged(sender As Object, e As EventArgs) _
    Handles textboxS.TextChanged

     checkforonetoten(Sender)
  End Sub

  private Sub checkforonetoten(tb As Textbox)

    Dim S As Double
    If Double.TryParse(tb.Text, S) Then

       ' your check for 1 - 10 on var S
    else
       ' error: not a valid number

    End If
  end sub

还:

 If (onetoten > 1 & onetoten < 10) Then

应该:

 If (onetoten > 1) AndAlso (onetoten < 10) Then
于 2013-10-20T23:57:54.113 回答