einen String als Rechnenaufgabe interpretieren

flokli

Erfahrenes Mitglied
Hallo,
ich habe in einem selbstprogrammierten Taschenrechner das Problem, dass die "Matheaufgabe" aus display.Text <--(String) als Rechnung interpretiert und ausgerechnet werden soll.
Ich denke da an so etwas wie eval( ) in PHP, Javascript, ...
Deshalb meine Frage: gibt es so was und wenn ja; wie heißt die Funktion?
 
Hallo, mit Eval liegst Du garnicht so verkehrt.
Füge bei den Komponenten das ScriptControl (Microsoft ScriptControl 1.0) hinzu.
Ziehe es auf Deine Form und versuch´s mal mit folgendem Code:
Code:
Private Sub Command1_Click()
Dim Rechenaufgabe As String

Rechenaufgabe = "10+20"

MsgBox ScriptControl1.Eval(Rechenaufgabe)

End Sub
Das ganze funktioniert auch mit einer TextBox.
 
Sorry, bin aber ein totaler Neuling auf dem Gebiet.
Ich hab jetzt in Visual Basic 2005 in meinen Projekteigenschaften unter Verweise das Microsoft Script Control1 hinzugefügt (Registerkarte DOM).
Doch es kommt beim Debuggen immer noch die Fehlermeldung "Der Name ScriptControl1 wurde nicht deklariert!".
Daraufhin habe ich bei Datenquellen alles was unter Microsoft Script Control steht eingefügt, es geht aber immer noch nicht. Was mache ich falsch?

Hier mein Code der hauptfenster.vb:
Code:
Public Class hauptfenster

    Private Sub BeendenToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BeendenToolStripMenuItem.Click
        Me.Close()
    End Sub

    Private Sub Button1_Enter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ce.Enter
        display.Text = ""
    End Sub

    Private Sub onoff_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles onoff.Click
        Me.Close()
    End Sub

    Private Sub ÜberToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ÜberToolStripMenuItem.Click
        ueber.Show()
    End Sub

    Private Sub eins_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles eins.Click
        display.Text = display.Text + eins.Text
    End Sub

    Private Sub zwei_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles zwei.Click
        display.Text = display.Text + zwei.Text
    End Sub

    Private Sub drei_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles drei.Click
        display.Text = display.Text + drei.Text
    End Sub

    Private Sub vier_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles vier.Click
        display.Text = display.Text + vier.Text
    End Sub

    Private Sub fuenf_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles fuenf.Click
        display.Text = display.Text + fuenf.Text
    End Sub

    Private Sub sechs_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles sechs.Click
        display.Text = display.Text + sechs.Text
    End Sub

    Private Sub sieben_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles sieben.Click
        display.Text = display.Text + sieben.Text
    End Sub

    Private Sub acht_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles acht.Click
        display.Text = display.Text + acht.Text
    End Sub

    Private Sub neun_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles neun.Click
        display.Text = display.Text + neun.Text
    End Sub

    Private Sub null_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles null.Click
        display.Text = display.Text + null.Text
    End Sub

    Private Sub komma_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles komma.Click
        display.Text = display.Text + ","
    End Sub

    Private Sub ausrechen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ausrechen.Click
        display.Text = MicrosoftScriptControl1.Eval(display.Text)
    End Sub
End Class
(Die Buttons "eins","zwei" usw fügen einfach die Zahlen zum Label hinzu)
 
Du musst natürlich erst ein ScriptControl "ins Leben rufen":
Code:
Dim oSC As New MSScriptControl.ScriptControl
'Jetzt kannst du die Methoden des ScriptControls verwenden:
oSC.Eval ("irgendwas")
Aber kannst du dich mal bitte für ein Forum entscheiden? Da hast du ja genau das gleiche gefragt, wobei das im richtigen Forum ist, nämlich dem .Net-Forum.
Diesen Thread hier hast du im VB-Forum eröffnet. Wenn du mit VB.Net programmierst (wie du geschrieben hast) ist das weniger sinnvoll.
 
Zuletzt bearbeitet:
ja ich weiß... war ein Fehler von mir...
Hab jetzt alles so gemacht, beim Ausprobieren gibt's aber ne Fehlermeldung:
(!) Com Exception wurde nicht behandelt
"The operation could not be completed because the script engine has not been initialized to a valid language."
 
Man muss wahrscheinlich noch oSC.Language einstellen.....ich kenn mich mit dem ScriptControl nicht aus.

Sonst probier mal folgendes: entferne den Verweis des MSScriptControls wieder und füge statt dessen das Control in der Werkzeugleiste ein (Link)
Unter VB.Net hat das bei mir funktioniert:
Code:
Me.Label1.Text = Me.AxScriptControl1.Eval("1+1")
Tipp
 
Zurück