如何将字符串转换为包含控件名称的vb表达式

时间:2014-10-02 12:48:31

标签: vb.net

..例如:有一个强调

strResult="controlName1.value * controlName2.value"

..我需要将其更改为controlName1.value * controlName2.value,以便我可以将输出作为双值

请回复

由于

3 个答案:

答案 0 :(得分:0)

如果您正在使用Windows窗体,则会有一个索引器属性,它将子控件的名称作为字符串接受,如果找到匹配则返回控件。请参阅:Control.ControlCollection.Item Property (String)。aspx

所有UI框架中的直接替代方案是将String映射到Control,如下所示:

Function MapStringToControl(ctlName As String) As Control
    Select Case ctlName
        Case "controlName1"
            Return controlName1
        Case "controlName2"
            Return controlName2
        Case Else
            Return Nothing
End Function

当然请注意,Windows窗体中没有.Value属性 - 您需要执行Integer.Parse(ctl.Text)之类的操作。

答案 1 :(得分:0)

这取决于它是什么类型的控制。例如,textbox具有.Text属性。 NumericUpDown控件具有.Value属性。

您需要做的就是将适当的属性转换为适当的类型。所以对于TextBoxes:

Dim result as Double = CDbl(txtFoo.Text) * CDbl(txtBar.Text)

对于NumericUpDown:

Dim result as Double = CDbl(nudFoo.Value) * CDbl(numBar.Value)

答案 2 :(得分:0)

大家好,感谢您的更新..我使用您的概念和其他一些代码片段编写了我自己的函数。我发布了结果

函数生成(ByVal alg As String,ByVal intRow As Integer)As String         Dim algSplit As String()= alg.Split(“”c)

    For index As Int32 = 0 To algSplit.Length - 1
        'algSplit(index) = algSplit(index).Replace("#"c, "Number")
        If algSplit(index).Contains("[") Then
            Dim i As Integer = algSplit(index).IndexOf("[")
            Dim f As String = algSplit(index).Substring(i + 1, algSplit(index).IndexOf("]", i + 1) - i - 1)
            Dim grdCell As Infragistics.Win.UltraWinGrid.UltraGridCell = dgExcelEstimate.Rows(intRow).Cells(f)
            Dim dblVal As Double = grdCell.Value
            algSplit(index) = dblVal
        End If

    Next

    Dim result As String = String.Join("", algSplit)
    'Dim dblRes As Double = Convert.ToDouble(result)
    Return result
End Function

再次感谢每一个人......期待未来一样