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