2013-12-19 3 views
0

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입니다.

+0

빠른 google 검색을 통해 나를 이끌어 냈습니다. http://en.kioskea.net/faq/18985-vb-evaluate-a-mathematical-expression-of-a-string, VB.NET을 구현 한 것입니다. 필요한 것. 변수를 지원하지는 않지만 구현 방법을 고려할 때 변수를 추가하는 것이 중요하지 않습니다. 다른 (더 나은) 표현 평가 클래스/라이브러리가있을 수 있습니다 - 그냥 인터넷 검색을 계속하십시오. – Neolisk

+0

직접 작성하려면 다음 링크를 참조하십시오. http://www.codeproject.com/Articles/9519/An-expression-evaluator-written-in-VB-NET and http : //www.vb -helper.com/howto_net_evaluate_expressions.html – Neolisk

+0

좋아요, 답장을 보내 주셔서 감사합니다. 곧 사용해 보겠습니다. – nbura

답변

0

의 ScriptControl 사용자가 정말 그물을 위해 설계되지 않은 오래된 기존 컨트롤의

대신 입력 자신의 방정식 할 수 있도록, 당신의 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 블록을 사용하면 잘못된 수식이 실행을 중지하지 않습니다.

중첩 된 괄호도 '(((* * 12.223 + 15)) - 7) * 21)/7 '.

+0

[it] (http://msdn.microsoft.com/en-us/library/system.data. datatable.compute (v = vs.110) .aspx)는 임의의 변수를 지원합니까? – Neolisk

+0

ToString 메서드를 사용하여 변수에서 문자열을 작성하십시오. 그러나 OP는 조각이 아닌 전체 수식 입력에 관해 묻고있었습니다. – tinstaafl