Textbox.Text in Code laden

  • VB.NET

Es gibt 20 Antworten in diesem Thema. Der letzte Beitrag () ist von m9898.

    Textbox.Text in Code laden

    Hallo,

    ich hab da ein (wahrscheinlich) sehr einfaches Problem:

    Ich habe ein Programm geschrieben, welches in eine Textbox ein weiteres Programm schreibt.
    Dieses möchte ich nun durch einen Button zum laufen bringen.

    Der Textbox1.text müsste einfach nur den Code-Editor von Button1 rein oder? - Wie geht das?

    Der Code beschränkt sich auf PictureBoxes, die für eine Dauer sichtbar bzw. unsichtbar gemacht werden (sollen).

    Schon mal vielen Dank im Vorraus!
    Erstmal willkommen im Forum :)

    Ich habe ein Programm geschrieben, welches in eine Textbox ein weiteres Programm schreibt.
    Dieses möchte ich nun durch einen Button zum laufen bringen.

    Der Textbox1.text müsste einfach nur den Code-Editor von Button1 rein oder? - Wie geht das?

    Der Code beschränkt sich auf PictureBoxes, die für eine Dauer sichtbar bzw. unsichtbar gemacht werden (sollen).


    Whaaaaaat? Keine Ahnung was du willst 8| Ich kann den Zusammenhang nicht finden, oder was du nun eigentlich machen willst, bitte erklär' mal genauer :)


    link_275 :thumbup:
    Hello World
    Zur näheren Beschriebung:
    Ind einer Textbox steht dann sowas wie:

    VB.NET-Quellcode

    1. Picturebox1.Visible = True
    2. PictureBox2.Visible = False
    3. PictureBox3.Visible = True
    4. PictureBox4.Visible = False
    5. Sleep(18)
    6. Picturebox1.Visible = False
    7. PictureBox2.Visible = True
    8. PictureBox3.Visible = True
    9. PictureBox4.Visible = True
    10. Sleep(560)


    Und auf Knopfdruck soll das dann ausgeführt werden (Disco für den Bildschirm :S )
    Wenn ich das manuel in den VB-Code kopiere klappt das auch soweit...
    Jetzt will ich das auf Knopfdruck in den VB-Code des Buttons_Start_Click "reinkriegen", damit bei Knopfdruck das Spektakel beginnt

    @fichz danke für die Antwort, aber müsste ich nicht die textbox1.text als .exe speichern und dann laden? --> Keine AHnung wie man ein Textbox Inhalt als Programm.exe speichert
    @YaPh1l ebendfalls danke, nur habe ich keine Ahnung von CodeDom...
    Das was du vor hast wird so nicht funktionieren, eine Funktion wie z.B. eval() bei PHP gibts soweit ich weiß nicht in VB.

    Du musst dir also eine eigene Scriptsprache schreiben und einen Parser, welcher den Text analysiert und entsprechend die Komponenten zuweist.

    Bsp.:

    VB.NET-Quellcode

    1. For Each sLine As String In Textbox1.Text.Split(vbNewLine)
    2. If sLine.Substring(0, 10) = "Picturebox" Then
    3. Me.Controls(s.Line.SubString(0, 11)).Visible = CBool(sLine.Substring(23, 27)
    4. End If
    5. Next


    Der Code wird nicht funktionieren, soll die aber Zeigen wie es z.B. gehen könnte, du durchläufst die einzelnen Zeilen des Textes, prüfst ob die Zeile mit "Pictruebox" beginnt, wenn ja wird in der ControlListe der Form das entsprechende Object geholt und die Visibile Eigenschaft zugewiesen.
    Noch besser würde das natürlich mit RegEx funktionieren.
    Aber ich würde dafür nicht den VB Code in die Textbox kopieren sondern allgemein ganz anders aufziehen.
    Also sowas kann man ja recht einfach als Skript machen.
    Ich hab mal ne mini Skriptsprache für dich entworfen, die sich recht leicht mit VB.net analysieren lässt:
    Syntax ist selbsterklärend, die grün markierten Wörter sind die Kommentare von mir, zu den einzelnen Zeilen

    Picture 1 show (bedeutet: Picturebox1.show)
    Picture 1 hide (bedeutet: Picturebox1.hide)
    Sleep 20 ( Bedeutet: Sleep(20) )

    Beispiel zum Debuggen von Picture:

    VB.NET-Quellcode

    1. Dim i as Integer = 0
    2. For Each line In textbox1.Lines
    3. Dim astring as string = textbox1.text.lines(i)
    4. Dim bstring as string
    5. if astring.contains("Picture")
    6. astring=astring.replace("Picture", " ")
    7. if astring.contains ("show")
    8. bstring="show"
    9. astring.replace("show", " ")
    10. else
    11. bstring="hide"
    12. astring= astring.replace("hide", " ")
    13. end if
    14. Dim a as integer= cint(astring)
    15. If a=1 and bstring ="show" Then
    16. Picturebox1.show
    17. end If
    18. If a=2 and bstring ="show" Then
    19. Picturebox2.show
    20. end If
    21. If a=3 and bstring ="show" Then
    22. Picturebox3.show
    23. end If
    24. If a=4 and bstring ="show" Then
    25. Picturebox4.show
    26. end If
    27. If a=1 and bstring ="hide" Then
    28. Picturebox1.show
    29. end If
    30. If a=2 and bstring ="hide" Then
    31. Picturebox2.show
    32. end If
    33. If a=3 and bstring ="hide" Then
    34. Picturebox3.show
    35. end If
    36. If a=4 and bstring ="hide" Then
    37. Picturebox4.show
    38. end If
    39. end if
    40. i=i+1
    41. Next

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „m9898“ () aus folgendem Grund: Code Korrigiert

    Ok Danke schon mal :thumbup:
    Insbesondere an "m9898"

    Auf die Schnelle hat das natürlich nicht geklappt...
    Aber ich denke wenn ich morgen nochmal was dran bastel... (ich hab mehr Glück als Verstand -> ich lerne das Programmieren erst seit 5 Tagen und hab mit nem Buch für 8jährige angefangenund bearbeite grad den nächstem Schmöker... war aber überrascht wie schnell und weit ich in meinem Zielprojekt vorwärts gekommen bin! :D
    In dem Sinne schon mal Dank an alle für euer Bemühen

    Zwurm

    Zwurm schrieb:

    Auf die Schnelle hat das natürlich nicht geklappt...
    Das liegt daran das der Code mehr als nur Fehlerhaft ist und natürlich auch total unsauber.
    Am besten eignet sich hierfür Regular Expressions, damit kann man eine Zeile schön auseinander nehmen und an alle nötigen Informationen kommen wie z.B. Controlname und Eigenschaft.

    @m9898: Wenn man keinen Copy&Paste code gibt ist das völlig i.O. schließlich sollen die Fragenden hier ja auch selbst aktiv werden, aber dann schreibe das doch bitte noch dazu, weil so denkt jener bei so nem umfangreichen Code müsse er ihn nur in seine IDE kopieren und würde sofort laufen.
    @m9898: Das ist ja auch völlig OK, aber dann solltest dies dazu schreiben, das es als Anregung dient.

    Weil sowas hier

    VB.NET-Quellcode

    1. Dim bstring as string =


    Oder

    VB.NET-Quellcode

    1. For Each line In textbox1.Lines


    und dann die Variable line gar nicht verwenden ist schon grob Fahrlässig und ehrlich gesagt verwirrt dieser Code wohl mehr als das er hilft durch die vielen Fehler darin, weil der User evtl. gar nicht richtig versteht was du damit nun genau bezwecken willst weil es vollkommen zusamenhangloser Code ist.
    Ne, wiso?
    An diesen Stellen war der Code doch vollkommen richtig.
    For each Line in Textbox1.Lines stimmt. Das habe ich getestet.
    Es kann aber sein, das ich da irgendwo bei den Ifs was falsch gemacht habe.
    Der Code ist doch ganz einfach:
    Konzept des Codes:

    1 Aktion: I als Integer Definieren, der beim Start des Codes den Wert 0 hat, astring als String definieren und bstring ebenfalls.
    2 Aktion: Für jede Zeile der Textbox1 nachfolgenden Code asführen:
    3 Aktion: Prüfen ob der Skript aus der Zeile (I) den text Picture enthält.
    4 Aktion: Ersetzen des Textes Picture in " "
    5 Aktion: Wenn die Zeile (I) den text show enthält, dann ist bstring gleich "show", wenn nicht, dann wird bstring gleich "hide".
    6 Aktion: Hide, bez. show mit " " ersetzen.
    7 Aktion: Integer a als den verbleibenden text von astring definieren.
    8 Aktion: Prüfen, welche nummer einer Picturebox mit a definiert wurde, und ob bstring als hide oder show definiert wurde.
    9 Aktion: Ausführen der jeweiligen Aktion.
    10 Aktion: I um einen Zähler erweitern.
    Dann hast du das Prinzip von For Each noch nicht verstanden. Sicher funktioniert das, aber ist in diesem Zusammenhang völlig bescheuert.

    Also entweder mit einer normalen For-Schleife

    VB.NET-Quellcode

    1. For i As Integer = 0 To Textbox1.Lines.Length - 1
    2. Dim astring as string = textbox1.text.lines(i)
    3. Next


    Oder mit For Each

    VB.NET-Quellcode

    1. For Each line As String In textbox1.Lines
    2. Dim astring as string = line
    3. Next


    Aber For Each zu werdenden und dann die Indexvariable i trotzdem manuell hoch zu zählen und die Variable line nicht zu verwenden ist völliger Humbug.
    versteht ich das jetzt richtig, dass :

    VB.NET-Quellcode

    1. If a = 1 And bstring = "Show" Then
    2. PictureBox1.Show()
    3. End If

    überhaupt nicht funktioniert?? so hat das doch Dustin und m9898 vorgeschlagen...

    Ich hab jetzt hinbekommen, dass bstring = "hide/show" ist und das a = eine ganze Zahl ist und es funktioniert nicht...
    ICH RASSTE AUS!!!Nach vielen rumexperimentieren hab ich den Fehler gefunden und er ist selten dumm, weil er so einfach ist, aber ich nicht drauf gekommen bin
    bei m9898 steht überall "picturebox.show"...
    mit dem nachfolgenden code klappt es bei mir, wobei die sleep funktion erst noch mit

    VB.NET-Quellcode

    1. Private Declare Sub Sleep Lib "kernel32" (ByVal Millisekunden As Long)
    "aktiviert" werden muss

    VB.NET-Quellcode

    1. Dim i As Integer = 0
    2. Dim astring As String = TextBox1.Lines(i)
    3. Dim bstring As String
    4. For Each astring In TextBox1.Lines
    5. If astring.Contains("Picture") Then
    6. astring = astring.Replace("Picture ", "")
    7. If astring.Contains("Show") Then
    8. astring = astring.Replace("Show ", "")
    9. bstring = "Show"
    10. Else
    11. astring = astring.Replace("Hide ", "")
    12. bstring = "Hide"
    13. End If
    14. Dim a As Integer = CInt(astring)
    15. If a = 1 And bstring = "Show" Then
    16. PictureBox1.Show()
    17. End If
    18. If a = 2 And bstring = "Show" Then
    19. PictureBox2.Show()
    20. End If
    21. If a = 3 And bstring = "Show" Then
    22. PictureBox3.Show()
    23. End If
    24. If a = 4 And bstring = "Show" Then
    25. PictureBox4.Show()
    26. End If
    27. If a = 1 And bstring = "Hide" Then
    28. PictureBox1.Hide()
    29. End If
    30. If a = 2 And bstring = "Hide" Then
    31. PictureBox2.Hide()
    32. End If
    33. If a = 3 And bstring = "Hide" Then
    34. PictureBox3.Hide()
    35. End If
    36. If a = 4 And bstring = "Hide" Then
    37. PictureBox4.Hide()
    38. End If
    39. ElseIf astring.Contains("Sleep") Then
    40. astring = astring.Replace("Sleep", "")
    41. Dim b As Integer = CInt(astring)
    42. Sleep(b)
    43. End If
    44. i = i + 1

    ich hoffe ich kann damit vllt auch anderen helfen ;)