我想在Visual Basic中制作一个(非常简单的)图形计算器,并且我使用ScriptControl,以便用户可以输入自己的公式,它将使用eval()
来获得结果。Visual Basic ScriptControl不会写入变量?
Public Class Form1
Dim sc As MSScriptControl.ScriptControl = New MSScriptControl.ScriptControl
Private Sub Form1_KeyPressed(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Me.KeyPress, Me.Load
sc.Language = "VBScript"
sc.AddObject("x", 355, True)
sc.AddCode("Sub setx(xvalo)" + vbCrLf + "x = xvalo" + vbCrLf + "End Sub")
Me.CreateGraphics.DrawLine(Pens.Black, New Point(0, 200), New Point(5000, 200))
Dim eq As String = InputBox("Please enter equation:")
Dim y As Double = 0
For i As Double = 0 To 50 Step 0.01
sc.Run("setx", i)
y = sc.Eval(eq)
Me.CreateGraphics.DrawLine(Pens.Blue, New Point(i * 10, y * 10 + 200), New Point(i * 10 + 0.1, y * 10 + 0.1 + 200))
Next
End Sub
End Class
当我运行这一点,类型x + 2
甚至只是在提示框中x
,我得到一个异常:NotSupportedException: Object doesn't support this property or method: 'x'
但我刚才添加X ...没有人知道如何解决这一问题?
另一个奇怪的事情:它似乎是每当我尝试编辑sc.AddCode()
参数,它说COMException was unhandled
。
快速谷歌搜索带领我到这里:http://en.kioskea.net/faq/18985-vb-evaluate-a-mathematical-expression-of-a-string,它是一个VB.NET实现你的东西需要。它可能不支持变量,但考虑它的实现方式,在其中添加它应该不是什么大问题。可能还有其他(更好的)表达评估课程/图书馆 - 只是继续搜索。 – Neolisk
如果你想自己写一个,这里有一些更多的链接:http://www.codeproject.com/Articles/9519/An-expression-evaluator-written-in-VB-NET和http://www.vb -helper.com/howto_net_evaluate_expressions.html – Neolisk
好的,谢谢你的回复,我会尽快试用 – nbura