清除vb.net中的所有文本框会引发错误

清除vb.net中的所有文本框会引发错误,vb.net,visual-studio,Vb.net,Visual Studio,我使用以下方法作为解决方法: Public Sub ClearTextBox(ByVal root As Control) For Each ctrl As Control In root.Controls ClearTextBox(ctrl) If TypeOf ctrl Is TextBox Then CType(ctrl, TextBox).Text = 0 If TypeOf ctrl Is Com

我使用以下方法作为解决方法:

Public Sub ClearTextBox(ByVal root As Control)
        For Each ctrl As Control In root.Controls
            ClearTextBox(ctrl)

            If TypeOf ctrl Is TextBox Then CType(ctrl, TextBox).Text = 0
            If TypeOf ctrl Is ComboBox Then CType(ctrl, ComboBox).Text = String.Empty

        Next ctrl
End Sub
我将文本框设置为0的原因是,当我设置String.Empty时,一个文本框(仅包含Int16)抛出转换错误。是否有人帮助停止错误或忽略一个文本框

根据Andrews的回复,我再次运行了代码,得到以下结果:

+$exception{“从字符串“”到类型'Short'的转换无效。”}System.InvalidCastException

突出显示的代码是:

变暗为Int16=Txt\u字符。Text

请容忍我一点,我对这个完全陌生,而且完全自学成才。如果您需要进一步的代码来帮助,请告诉我。
当您有这样一条线路时,谢谢

Dim age As Int16 = Txt_CharAge.Text
你在告诉计算机把一个字符串转换成一个数字。如果没有Option Strict On,它可以自由地将字符串(不是Int16)填充到Int16中。你已经放弃了对当时发生的事情的控制

更好的方法是告诉它如何将文本中的字符转换为数字。(请参阅,以了解某事物的表示形式不是该事物的解释。)

对于许多内置类型,有一组现成的方法名为
TryParse

因此,与其

Dim age As Int16 = Txt_CharAge.Text
你应该

Dim age As Integer
Integer.TryParse(Txt_CharAge.Text, age)
TryParse
方法实际上是函数,如果解析成功,它们将返回
True
,否则它们将返回
False
(并将变量设置为其默认值),但在这种情况下,您似乎不需要知道解析是否成功,因为整数的默认值0就足够了


请注意,实际上不需要使用Int16而不是整数,除非您知道为什么需要添加使用Int16而不是整数的复杂性。

好的,谢谢您更新问题。当
Txt\u CharAge.Text
中没有任何字符时,您希望
age
的值是多少?它不必是任何内容,只要一个空字符串就可以了。解决方法,适用于该文本框,但我有其他方法通常会包含实际文本,而0可以工作,当你知道它在寻找文本答案而不是整数时,它看起来非常奇怪。解决方法是
Dim age As Integer=cint(“0”+Txt\u CharAge.text.trim())
这将始终是一个有效数字。请注意,这对+/-符号不起作用。太好了,谢谢您的完整解释,这真的很有帮助。@Silver616谢谢,很高兴您发现它有用:)