String Ausführen

  • VB.NET

Es gibt 23 Antworten in diesem Thema. Der letzte Beitrag () ist von iBot.

    String Ausführen

    Hallo!
    Ich habe da mal eine Frage:
    Wie kann ich machen, dass ein String augeführt wird.
    Also ich habe in meiner Form ein Textfeld und einen Button.
    In das Textfeld kann der Benutzer beispielsweise einen Befehl schreiben (egal was für ein Befehl).
    Und wenn man dann auf den Button klickt, soll der Code darin ausgeführt werden.
    Bsp.:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(....) Handles Button1.Click
    2. Dim befehl as String = TextBox1.Text
    3. 'hier sollte 'befehl' ausgeführt werden.
    4. End Sub


    Ich hoffe ihr könt mir helfen

    LG
    -iBot
    Ja das hab ich mir auch überlegt, aber der Benutzer soll alles eingeben können.
    Von mir aus auch
    Me.Left=654
    Oder so.
    Also wirklich ALLES.
    Und ich kann ja schlecht ALLES abfragen, oder?!

    Und bei MSgBox("sdfjk") soll ja auch der text übernommen werden.

    LG
    -iBot
    In vielen Sprachen gibt es die Möglichkeit, per eval() soetwas zu tun. In VB allerdings nicht. Eine Möglichkeit, die mir spontan einfällt wäre, zur Laufzeit per vbc (Visual Basic .NET-Compiler) eine Exe zu erstellen und diese per Process.Start() auszuführen. Eventuell gibt es noch in irgendeinem Namespace eine Möglichkeit, Code zur Laufzeit auszuführen, doch wenn, dann ist diese Funktion gut versteckt.
    hm..
    Wäre es nicht vielleicht möglich, den Quelltext in eine neue VB schreiben zu lassen und den dann so auszuführen!?
    Sodass die neue vb "tmp.vb" dann so aussieht:

    VB.NET-Quellcode

    1. Public Class Form_tmp
    2. Private Sub Form_tmp_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    3. with Form1
    4. 'hier kommt das was in das textfeld geschrieben wurde hin
    5. end with
    6. End Sub
    7. End Class

    Und nach dem ausführen wird die tmp.vb wieder von der anderen Form gelöscht.

    Aber wie führe ich die vb dann aus?

    LG
    -iBot
    meines Wissens nach nicht...
    schreib doch einfach deine eigene Script SPrache wie wär' denn das?

    und das mit Me.Left=646 is ja nun auch nicht grad n Problem....splitten ist das Zauberwort^^

    Keine PN's bezüglich VB an mich! Dafür gibt es das Forum!

    :Kreis hier. Kreis da.:

    Hallo ihr.


    Also als erstes. Wenn mir jemand sagt: Mach Me.Left = 654
    Dann würde ich erstma net anspringen. Aber jetzt kommt es drauf an, was du meinst.
    Ich könnte mir denken, dass der String den Code des Programmes ansprechen soll.
    Was das betrifft hab ich keine Ahnung. Müssteste zur Not z.B. so machen:


    VB.NET-Quellcode

    1. If TextBox1.Text = "Me.Left" ThenMe.Left = Val (TextBox2.Text)End If




    Wenn mit dem String ein Programm gestartet werden soll, geht das hiermit: (sollte man eig kennen)


    VB.NET-Quellcode

    1. Shell (TextBox1.Text)


    Hierbei muss das Verzeichnis mit angegen sein ("C:\Programme\Counter-Strike Souce\hl2.exe")
    Wenn du dann noch einen FileSystemWatcher (ich glaube nur VB2008) einbaust,
    musste vllt sogar garnet das direkte Verzeichnis angeben.
    Ansonsten noch viel Spaß.
    (Hab ich das mit der MsgBox falsch verstanden??? Meinste MsgBox (TextBox1.text)...zur Info :D )



    mfg asconblake [Entwicklerteam Masterforms] *frohes neues 8o [b]*[/b]

    Ok das war voll daneben ^^
    Genau das wollte ich nicht.
    Dass man mit shell ein Programm starten kann weiß ich auch und ich möchte einfach, dass der Benutzer was eingeben kann, was dann auch ausgeführt wird. So wie es hinein geschrieben wird.
    Und das mit der MsgBox war nur ein Beispiel.

    LG
    -iBot
    Ich glaube er meint da eher sowas wie Eigenschaftsbefehle.
    Zur Not musst du halt für jede Eigenschaft eigens überprüfen lassen, oder mit Stichworten arbeiten. Wenn er dann z.B. "me.left" in der Textbox findet soll er die eigenschaft auf den Wert setzen. und wenn er noch mehr Befehle finded kannst das evtl. aufteilen oder nur den ersten Befehl beachten lassen. Mehr fällt mir spontan nicht ein.

    ~Sturmvogel~

    PS:
    Nur mal so aus neugierde:
    FÜR WAS BRAUCHT MAN DAS?
    Ich meine aus meiner Sicht ist das unnötig^^
    Ich glaube er meint da eher sowas wie Eigenschaftsbefehle.
    Genau..
    Zur Not musst du halt für jede Eigenschaft eigens überprüfen lassen, oder mit Stichworten arbeiten. Wenn er dann z.B. "me.left" in der Textbox findet soll er die eigenschaft auf den Wert setzen. und wenn er noch mehr Befehle finded kannst das evtl. aufteilen oder nur den ersten Befehl beachten lassen. Mehr fällt mir spontan nicht ein.
    hm..
    Eine andere Möglichkeit wäre eine vb auszuführen.
    So als neue Form.
    Weil wenn das ginge könnte ich ja vb in einen neuen Quelltext in eine Datei schreiben lassen (ist ja kein Problem)
    Und dann nur noch die Neue Datei ausführen lassen.. kommt ja aufs gleiche raus..

    Also entweder externe Datei oder einen String ausführen.

    LG
    -iBot

    PS:
    PS:
    Nur mal so aus neugierde:
    FÜR WAS BRAUCHT MAN DAS?
    Ich meine aus meiner Sicht ist das unnötig^^
    Hehe :P
    ja ds ist richtig...aber das wäre ja nun das geringste Problem. und mit der Extradatei, das is unnötig.
    kannst dafür ja auch noch ne Konsolenanwendung ereithalten, dort kann man die vorherigen eingaben ja wenigstens
    als Varialble speichern. Die sache mit dem spezifisieren der einzelnen Eigenschaften des Fensters ist nicht so schwer.
    Kannste am besten ne Klasse dafür anlegen. macht sich einfach besser. Sowas ist in meinem neuen Programm der Expire-Serie auch vorhanden. Solche Anwendungen kann man eigentlich für viele Sachen nutzen, für wirklich komplexere Anwendungen wie bei dem
    Community-Projekt: XP-Sidebar gut zu verwenden. (zu der frage für was das gut sein soll)



    mfg asconblake [Entwicklerteam Masterforms]
    Aber wie soll das gehen?
    Naja....ganz einfach iBot.

    Du legst ne Klasse an.


    VB.NET-Quellcode

    1. Function DoEvents (ByVal EventName as String, ByVal Value as Integer) as String
    2. If EventName = "Me.Left" Then
    3. Dim oForm1 as New Form1 = Windows.Forms.Form
    4. oForm1.Left = Val (Value)
    5. End If
    6. End Function



    Das war jetzt ein Beispiel, weis net obs geht. Aber für jede Eigenschaft musste das anlegen.
    Musste ma gucken


    mfg asconblake [Entwicklerteam Masterforms]
    Wie ich bereits schrieb. VB-Datei erstellen und kompilieren, dann ausführen. Da werde ich heute ein Tutorial zu schreiben.
    EDIT: Ich sehe grade: Da gibt es schon was schönes zu. Link: eggheadcafe.com/articles/20030908.asp
    Und damit kann man dann einen Befehl als String übergeben, der ausgeführt wird. Allerdings kann man nicht einfach Me.Left = 2332 übergeben, sondern muss schon die Prozess-ID der Form übergeben und den Code, der benötigt wird, die Form zu verschieben. Oder man packt die Funktion in die gleiche Klasse rein.
    Ja, hast du. Du wolltest einen Interpreter schreiben. Mit der von mir gezeigten Möglichkeit kompiliert man im Ram eine Assembly und führt diese aus. Wesentlich einfacher. Dabei wird im Ram eine Textdatei erzeugt mit den Befehlen, diese durch vbc.exe (Den Visual-Basic Compiler) gejagt, dieser gibt dann eine dll aus, die im Ram ausgeführt wird. Und schon sind wir fertig.