GIF-Animation in einer Picture Box ändern

  • VB.NET

Es gibt 21 Antworten in diesem Thema. Der letzte Beitrag () ist von MPIler.

    GIF-Animation in einer Picture Box ändern

    Hallo miteinander,
    ich habe mal wieder eine Frage.
    Ich möchte, dass in einer PictureBox eine GIF-Animation durch eine andere ersetzt wird,
    wenn ein bestimmtes Event passiert. Das Event wäre in meinem Fall ein TextBox Wert < 0.
    Da aber der Wert "Image" bei der PictureBox immer der selbe ("System.Drawing.Bitmap") ist, habe ich keine Ahnung, wie ich das anstellen soll.
    Ich freue mich auf hilfreiche Antworten und bedanke mich schonmal im Voraus.

    MFG

    MPIler

    Bezieht sich alles auf VB2008 Express und WinXp

    MPIler schrieb:

    Da aber der Wert "Image" bei der PictureBox immer der selbe ("System.Drawing.Bitmap") ist
    das stimmt so nicht.

    du kannst jederzeit das image ändern:

    VB.NET-Quellcode

    1. Dim b As Boolean
    2. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    3. If b Then
    4. PictureBox1.Image = My.Resources.Resource1.smileys32
    5. b = False
    6. Else
    7. PictureBox1.Image = My.Resources.Resource1.smileys61
    8. b = True
    9. End If
    10. End Sub

    hier z.b. wird immer zwischen den 2 smileys gewechselt, wenn ich button2 drücke.

    wenn du ein bild von der festplatte laden willst, machst du das über

    VB.NET-Quellcode

    1. PictureBox1.Image = Image.FromFile("dateipfad")
    Danke, mein fehler war, dass ich immer als lokale ressource importiert habe und nicht als ressourcen datei.
    Also danke.
    Ich hab den rest so gemacht, wie du beschrieben hast.
    War ja nicht so schwer. ;)
    Aber ich hab mal ne andere Frage:
    Ich würde gerne den Wert einer TextBox immer um z.B. 10 steigern, wenn ich die Taste "Links" drücke.
    Ich habe sowas bislang nur mit VB6 gemacht daher habe ich keinen Plan.
    Übrigens geht es bei diesem Programm um eine Art Pac-Man, dass ich eigentlich für die Schule machen soll, aber da ich auch so interessiert bin, mache ich es halt zuhause
    stichwort: .KeyDown()

    VB.NET-Quellcode

    1. Private Sub TextBox1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown
    2. If e.KeyCode = Keys.Left Then
    3. TextBox1.Text = (Integer.Parse(TextBox1.Text) - 10).ToString
    4. End If
    5. End Sub
    Ich finde das echt cool, wie schnell hier geantwortet wird. Also Danke. Es funzt gut. Ich habe das selbe jetzt auch schon fur hoch.runter.rechts und links gemacht. Aber warum unterscheiden sich eigentlich die VB-Versionen so von einander?(Frag ich jetzt nur noch aus Neugier)
    Ich finde das echt cool, wie schnell hier geantwortet wird.
    manchen leuten macht das wohl einfach spaß hier ^^ (außerdem lernt man damit ja auch weiter)
    Aber warum unterscheiden sich eigentlich die VB-Versionen so von einander
    ka lol

    PS: wenn du vorhast ein spiel zu machen, würde ich aber das .KeyDown aus der textbox nehmen und lieber auf die form legen.
    Ok dann baue ich das in das Form ein.
    Eine letzte Frage hätte ich aber noch, auch wenn diese sich nicht direkt auf VB bezieht:
    Meine GIFs sind alle auf so einem weissen Rechteck "gefangen".
    Gibt es da eine Möglichkeit das zu beseitigen oder muss ich den Hintergrund des Forms weiss machen(dann sieht mans ja nicht)?

    Sorry wegen Off-Topic.

    Es passiert bei mir leider nichts, wenn ich folgenden Code eingebe:

    VB.NET-Quellcode

    1. Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown
    2. If e.KeyCode = Keys.Left Then
    3. TextBox1.Text = TextBox1.Text - 10
    4. End If
    5. End Sub

    End Sub

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „MPIler“ ()

    was den code angeht, musst du in den form-eigenschaften KeyPreview auf true stellen.

    und mit den gifs kommt's drauf an, ob sie einen alpha-wert haben, dann wird kein hintergrund dargestellt. notfalls müsstest du die nochmal mit paint.net oder was in der art überarbeiten.
    Es funzt nicht so ganz denn ich kann erst per Tasten steuern wenn ich vorher in die TextBox clicke, dass muss doch auch anders gehen. Ich hab bestimmt wieder was falsch gemacht:

    VB.NET-Quellcode

    1. Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown
    2. If e.KeyCode = Keys.Left Then
    3. TextBox1.Text = TextBox1.Text - 10
    4. End If
    5. If e.KeyCode = Keys.Right Then
    6. TextBox1.Text = TextBox1.Text + 10
    7. End If
    8. If e.KeyCode = Keys.Down Then
    9. TextBox2.Text = TextBox2.Text + 10
    10. End If
    11. If e.KeyCode = Keys.Up Then
    12. TextBox2.Text = TextBox2.Text - 10
    13. End If
    14. End Sub



    Wenn ich die GIFs mit Paint.Net öffne, dann bekomme ich immer nur ein Bild zusehen, obwohl es aus 30 besteht.
    Wie muss ich die GIF denn öffnen?
    Und krieg ich es wirklich hin, dass wirklich nur noch die Animation zusehen ist und keine weisses Quadrat, auf dem die läuft?

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „MPIler“ ()

    als bei einem normalen bild geht das ohne probleme, aber bei einer animierten gif wird das wohl reichlich aufwändig.

    bin davon ausgegangen, dass du ein bild verwenden willst.

    was du versuchen könntest wär was in der art

    VB.NET-Quellcode

    1. PictureBox1.BackColor = Color.FromArgb(0, 255, 255, 255)


    und dann bete. :whistling:

    wenn das auch nix bringt, wirst du wahrscheinlich die gif auseinanderpfücken müssen und jedes einzelbild bearbeiten müssen :thumbdown:
    versuch das hier mal eins-zu-eins

    VB.NET-Quellcode

    1. Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As KeyEventArgs) Handles MyBase.KeyDown
    2. If e.KeyCode = Windows.Forms.Keys.Left Then
    3. TextBox1.Text = Integer.Parse(TextBox1.Text) - 10
    4. ElseIf e.KeyCode = Windows.Forms.Keys.Right Then
    5. TextBox1.Text = Integer.Parse(TextBox1.Text) + 10
    6. ElseIf e.KeyCode = Windows.Forms.Keys.Up Then
    7. TextBox1.Text = Integer.Parse(TextBox1.Text) + 20
    8. ElseIf e.KeyCode = Windows.Forms.Keys.Down Then
    9. TextBox1.Text = Integer.Parse(TextBox1.Text) - 20
    10. End If
    11. End Sub
    Hi,
    @lordknoblauch: Wenn schon explizierte Typenkonvertierung, dann richtig ;) Musst auch alles wieder zurück in einen Strink casten.

    VB.NET-Quellcode

    1. Textbox1.Text = CStr(CInt(TextBox1.Text) - 10)


    @MPIler: Controls kann man leider nicht transparent machen. Aber du kannst es mal so versuchen:

    VB.NET-Quellcode

    1. PictureBox1.BackColor = Color.FromArgb(0, 254, 254, 254)

    Für unser Auge ist das noch völlig transparent, für den Computer nicht.
    Mir hilft beides nicht so ganz.
    Denn ich möchte ja nicht die ganze PictureBox verschwinden lassen, sondern nur den weissen Bereich, der die eigentliche Animation umgibt. Aber das werde ich ja sowieso mit GIMP oder sowas machen müssen.
    Und das zurück konvertieren hilft mir auch nicht.
    Denn sobald ich die TextBox.Visible = False setze, oder irgend einen Button einfüge, passiert nichts mehr wenn ich die Tasten drücke:
    Kann es denn sein, dass ich einfach irgend eine Einstellung der TextBox ändern muss, damit diese auch angesprochen wird, wenn sie nicht "visible" ist????
    Ich weiss halt nur, dass das in VB6 nicht so ist. Und kann es mir eigentlich auch bei 2008 nicht vorstellen.