3

是否可以使用字符串作为变量的名称?例如..
我将 x 声明为私有双精度

 Private TextBox1Store,TextBox2Store,TextBox3Store As Double

我将使用它作为存储值的变量。

此函数将标签和文本框中的数字相乘并返回一个产品。

 Private Function mqtyCalc(ByVal y As Integer, ByVal z As Integer) As Integer
    Dim w As Integer
    w = y * z
    Return w
 End Function

这部分处理三个文本框事件。

 Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged, TextBox2.TextChanged, TextBox3.TextChanged
    Dim tb As TextBox = sender
    Dim tempObjNm As String
    tempObjNm =    tb.Name + "Strore"
    tempObjNm = mqtyCalc(someVariable.Text, Label1.Text)
End Sub

这就是我要解决的部分。

 tempObjNm = someVariable.Name + "Strore"
 tempObjNm = mqtyCalc(tb.Text, Label1.Text)

“tempObjNm”在这个 sub 中被声明为字符串。
每次我在文本框中输入一个值时,这个 sub 将获取已插入值的文本框的名称,并且名称将在其末尾添加“存储”,以模仿上面声明的变量名称。例子,

temObjNm = TextBox1Store(模仿私有 TextBox1Store)
temObjNm 当前是一个由

  Dim tempObjNm As String

作为一个字符串

这部分是sub的存储部分

 tempObjNm = mqtyCalc(tb.Text, 4)

(注意 tempObjNm = "TextBox1Store" 的值

当我打印 TextBox1Store 时,它​​打印 0

那个怎么样?难道不能使用字符串来模仿变量只是为了在其中存储值吗?

4

3 回答 3

2

只需这样做:

Dim tb As TextBox = CType(sender, TextBox)
Me.Controls(tb.Name & "Store") = mqtyCalc(CInt(someVariable.Text), CInt(Label1.Text))

我强烈建议你做几件事。首先,在您的项目属性中启用Option Strict On,因为它将改进您的编程实践。而且,正如您在我的代码中看到的那样,在 VB.NET 中使用&而不是连接字符串。+

于 2013-03-12T08:17:42.810 回答
1

你能用一个Dictionary(Of String, Double)吗?

Private values As New Dictionary(Of String, Double)

Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
    setValue(sender)
End Sub

Private Sub setValue(sender As Object)
    Dim tb As TextBox = CType(sender, TextBox)
    Dim tbName As String = tb.Name & "Strore"
    If Not values.ContainsKey(tbName) Then
        values.Add(tbName, tb.Text)
    Else
        values(tbName) = tb.Text
    End If
End Sub

Private Function getValue(sender As Object) As Double
    Dim tbName As String = CType(sender, TextBox).Name & "Strore"
    If Not values.ContainsKey(tbName) Then
        Return Double.NaN
    Else
        Return values(tbName)
    End If
End Function
于 2013-03-12T16:49:09.927 回答
0

我想分享我正在使用的代码。希望这有助于这个问题的未来观众。

Dim tb As TextBox = sender
Dim tempObjNm As String
tempObjNm =    tb.Name + "Strore"
Me.GetType.GetField(tempObjNm).SetValue(Me, CType(mqtyCalc(someVariable.Text, Label1.Text), Double))
于 2019-09-04T07:20:30.670 回答