将参数传递给VB中的方法

时间:2013-10-20 23:18:06

标签: vb.net methods arguments

我希望你们能帮助解决一个应该很容易解决的问题,我只是遇到了寻找解决方案的问题。在我正在编写的程序中,一些文本框必须是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

2 个答案:

答案 0 :(得分:1)

您的主要问题之一是您在不验证文本的情况下转换文本。您还在没有选项开启的情况下进行编程,以警告您在事件处理程序中使用的错误转换技术。

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控件会使所有这些都没有用,因为值始终只是数字,您可以在每个值上设置范围。

答案 1 :(得分: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仍然有一个)并在公共过程中执行所有操作:

  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