如何解决是否可以为每个语句传递一组文本框名称
我有一个包含 7 个文本框的表单,我喜欢使用“For Each”语句来处理其中的值,因此我使用了以下代码,在其中定义了一个包含文本框名称的字符串数组和将其成员传递给 "me.controls()" ,在此语句的行上触发错误:"未将对象引用设置为对象的实例"
Dim grades() As String = {"sa","sb","sc","sd","ss","sr","st"}
Dim x As String = InputBox("what is the multiplier","Enter Value","1")
For Each s In grades
If Not String.IsNullOrEmpty(Me.Controls(s).Text) Then
Me.Controls(s).Text = Math.Round(CDbl(Me.Controls(s).Text) * CDbl(x))
End If
Next
实现这一目标的最佳方法是什么?谢谢
解决方法
当您可以传递 TextBoxes
本身时,为什么还要传递 TextBoxes
的名称?假设您在设计器中添加了 TextBoxes
,将为每个字段生成一个字段,因此请使用它们:
Dim textBoxes = {sa,sb,sc,sd,ss,sr,st}
For Each textBox In textBoxes
'Use textBox here.
Next
,
除了按照 jmcilhinney 的建议从 TextBox 本身(而不是它们的名称)创建一个数组之外,我建议您在尝试之前使用 Double.TryParse() 来确定用户输入的乘数和等级是否实际上是有效的双打和他们一起做数学。这将防止来自错误输入的运行时异常:
Private Sub Button1_Click(sender As Object,e As EventArgs) Handles Button1.Click
Dim grades() As TextBox = {sa,st}
Dim x As Double
Dim strX As String = InputBox("what is the multiplier","Enter Value","1")
If Double.TryParse(strX,x) Then
For Each s In grades
Dim grade As Double
If Double.TryParse(s.Text,grade) Then
s.Text = Math.Round(grade * x)
End If
Next
Else
MessageBox.Show("Invalid Multiplier")
End If
End Sub
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。