簡易関数電卓JsCalc Visual Basic 2010 (3)

 「Math.」を付けるのが面倒なので、付けなくてもいいように改良しました。(^_^;
 Button1_Click()をちょっと書き直して、Accept(),IsAlNum2(),SplitTok()関数を新設しました。

    Private Sub Button1_Click(
        ByVal sender As System.Object, ByVal e As System.EventArgs
    ) Handles Button1.Click

        Dim strExpr As String = Accept(TextBox1.Text)
        TextBox2.Clear()
        TextBox2.Text = JsEval(strExpr)
    End Sub

    Function Accept(ByVal expr As String) As String
        Dim result As String = Replace(expr, "Math.", "")
        Dim lst() As String = {
            "E", "LN", "LOG", "PI", "SQRT",
            "abs", "acos", "asin", "atan", "ceil", "cos", "exp", "floor", "log",
            "max", "min", "pow", "random", "round", "sin", "sqrt", "tan"
        }
        result = SplitTok(result)
        For Each target As String In lst
            result = Replace(result, vbLf + target, "Math." + target)
        Next
        result = Replace(result, vbLf, "")
        Return result
    End Function

    Function IsAlNum2(ByVal strCh As String) As Boolean
        Dim result As Boolean = False
        Dim chrCh As Char = UCase(strCh.Chars(0))

        Select Case chrCh
            Case "A" To "Z", "0" To "9", "_"
                result = True
            Case Else
                result = False
        End Select
        Return result
    End Function

    Function SplitTok(ByVal strS As String) As String
        Dim result As String = vbLf, ch As String = Strings.Left(strS, 1)
        Dim i As Integer, flag As Boolean = IsAlNum2(ch)

        result += ch
        For i = 2 To strS.Length
            ch = Mid(strS, i, 1)
            If IsAlNum2(ch) <> flag Then
                result += vbLf : flag = Not flag
            End If
            result += ch
        Next

        Return result
    End Function

 こっちの方が楽でいいかな。Button1_Click()をだけちょっと書き直して、Accept(),IsAlNum2(),SplitTok()関数は不要。(^_^;

    Private Sub Button1_Click(
        ByVal sender As System.Object, ByVal e As System.EventArgs
    ) Handles Button1.Click

        Dim sExpr As String = "with(Math){" + TextBox1.Text + "}"  '「Math.」を省略可能にするため
        TextBox2.Clear()
        TextBox2.Text = JsEval(sExpr)
    End Sub

 また、WebBrowserを使わずに、eval()関数を呼び出す方法は、こちらです。(^_^;

    Public Function jsEval(ByVal sSrc As String) As String
        Dim result As String = ""
        Dim objSC As Object = CreateObject("ScriptControl")

        objSC.language = "Jscript"
        Try
            result = objSC.CodeObject.eval(sSrc)
        Catch ex As Exception
            MsgBox(ex.Message, MsgBoxStyle.Exclamation)
            result = "Error!"
        End Try

        objSC = Nothing
        Return result
    End Function

※参考URL
簡易関数電卓JsCalc Visual Basic 2010
簡易関数電卓JsCalc Visual Basic 2010 (2)

基礎Visual Basic 2010 (IMPRESS KISO SERIES)

基礎Visual Basic 2010 (IMPRESS KISO SERIES)

VisualBasic2010逆引き大全555の極意

VisualBasic2010逆引き大全555の極意

ゼロから学ぶ! 実用Visual Basic2010 (日経BPパソコンベストムック)

ゼロから学ぶ! 実用Visual Basic2010 (日経BPパソコンベストムック)

ひと目MS VISUAL BASIC 2010 アプリケーション開発入門 (MSDNプログラミングシリーズ)

ひと目MS VISUAL BASIC 2010 アプリケーション開発入門 (MSDNプログラミングシリーズ)

ステップアップ VISUAL BASIC 2010 (MSDNプログラミングシリーズ)

ステップアップ VISUAL BASIC 2010 (MSDNプログラミングシリーズ)

Visual Basic 2010入門

Visual Basic 2010入門

明快入門 Visual Basic 2010 (林晴比古実用マスターシリーズ)

明快入門 Visual Basic 2010 (林晴比古実用マスターシリーズ)

これからはじめるVisualBasic2010

これからはじめるVisualBasic2010

作って覚える Visual Basic 2010 Express入門

作って覚える Visual Basic 2010 Express入門

独習Visual Basic 2010

独習Visual Basic 2010