Visual Basic ScriptControl не будет писать в переменную?
Я пытаюсь сделать (очень простой) графический калькулятор в Visual Basic, и я использовал ScriptControl, чтобы пользователь мог ввести свое собственное уравнение, и он будет использовать eval()
чтобы получить результат.
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'
Но я добавил х раньше... кто-нибудь знает, как это исправить?
И еще одна странная вещь: кажется, что всякий раз, когда я пытаюсь редактировать sc.AddCode()
аргументы, это говорит COMException was unhandled
,
1 ответ
ScriptControl, так что пользователь может ввести свое собственное уравнение
Вместо старого устаревшего элемента управления, не предназначенного для.net, вы можете попробовать использовать метод Compute в DataTable:
Dim dt As New DataTable()
Try
Dim result2 As Double = CDbl(dt.Compute(ExpressionString, ""))
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
С блоком Try некорректные формулы не остановят выполнение
Также будут оцениваться вложенные скобки '(((3*(12,223+ 15)) - 7)*21)/7'.