I'm trying to make a (very simple) graphing calculator in Visual Basic, and I used ScriptControl so that the user can input their own equation and it'll use eval() to get the result.
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
When I run this and type in x + 2 or even just x in the prompt box, I get an exception: NotSupportedException: Object doesn't support this property or method: 'x'
But I added x earlier... does anyone know how to fix this?
And another weird thing: It seems like whenever I try to edit the sc.AddCode() arguments, it says COMException was unhandled.
Instead of an old legacy control not really designed for .net, you could try using the Compute method in DataTable:
With the Try block invalid formulas won't stop execution
It will evaluate nested parentheses as well '(((3*(12.223+ 15)) - 7)*21)/7'.