你怎么能在VB.Net中评估字符串中引用的控件的值?假设您有一个包含一些字母数字内容的文本框N,并且它在字符串变量中引用,如下所示:
Dim s As String = """Hello "" & N.Text & ""!"""
我希望能够在代码中的其他地方重新评估s变量的内容(其中没有直接知道N的存在),例如,像这样:
Dim e As String = Eval(s)
VB.Net无法做到这一点;没有这样的Eval功能。我在网上看到了一些几乎看似合理的解决方案,比如使用旧的COM ScriptControl:
Private Shared _scriptControl As MSScriptControl.ScriptControl = New ScriptControl()
_scriptControl.Language = "VBScript"
Dim e As String = _scriptControl.Eval(s)
但是,对Windows窗体控件的N.Text属性的引用与ScriptControl对象不同,因此会引发错误。
是否有其他快速解决方案不需要购买第三方组件?
答案 0 :(得分:3)
但是,对Windows窗体的N.Text属性的引用 控件与ScriptControl对象不同,因此它会抛出 一个错误。 ......我只提到了ScriptControl想要抵挡的想法 答案可能涉及我已经提到的那种方法 尝试过,不想浪费我们的时间。
您可以将TextBox添加到脚本控件。首先,使用它的名称获取对“N”的引用。不确定你是否已经拥有控件的名称;如果没有,您可能需要解析您的字符串以获取名称。然后使用Controls.Find()获取引用并将其传递给AddObject()。现在您的字符串可以按预期进行评估:
Private Shared _scriptControl As MSScriptControl.ScriptControl = New ScriptControl()
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
_scriptControl.Language = "VBScript"
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim ctlName As String = "N"
Dim ctl As Control = Me.Controls.Find(ctlName, True).FirstOrDefault
If Not IsNothing(ctl) Then
Try
_scriptControl.AddObject(ctlName, ctl)
Catch ex As Exception
End Try
Dim code As String = """Hello "" & N.Text & ""!"""
Dim result As String = _scriptControl.Eval(code)
MessageBox.Show(result)
End If
End Sub
答案 1 :(得分:1)
String Interpolation。由于控件在Form的设计器中被声明为Friend变量,因此可能您可以在String中使用对该控件的引用,如下所示: / p>
Dim s As String = $"Hello {N.Text}!"