PictureBox: "Weiter" -> Neues Bild

  • VB.NET

Es gibt 27 Antworten in diesem Thema. Der letzte Beitrag () ist von xtts02.

    PictureBox: "Weiter" -> Neues Bild

    Hi :D
    Habe ein Problem:
    Ich will wenn ich auf "Weiter" (Button) drücke ein neues Bild in der PictureBox haben

    VB.NET-Quellcode

    1. Private Sub Weiter_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Weiter.Click
    2. Img.Image = My.Resources.Pict2
    3. Img.Image = My.Resources.Pict3
    4. End Sub


    Da kommt dann aber Pict3 anstatt Pict3 :O
    Mir ist schon klar dass da was fehlt aber ich kenne den code halt nich :(

    VB.NET-Quellcode

    1. If Img.Image = My.Resources.Pict1 Then
    2. Img.Image = My.Resources.Pict2
    3. End If
    4. If Img.Image = My.Resources.Pict2 Then
    5. Img.Image = My.Resources.Pict3
    6. End If

    Einfach abfragen, welches Bild momentan angezeigt wird und das nächste Bild anzeigen.

    In deinem Code wird jede Zeile ausgeführt bis zur letzten. Also wird am Ende die Letzte Zeile ausgeführt, welche Pict3 anzeigt.
    Ist doch logisch, du lädst zuerst Bild 2 und darauf gleich Bild 3.
    Mach's so:

    VB.NET-Quellcode

    1. Dim Count As Integer = 0
    2. Count += 1
    3. Select Case Count
    4. Case 0
    5. Img.Image = My.Resources.Pict2
    6. Case 1
    7. Img.Image = My.Resources.Pict3
    8. Case 2
    9. Count = 0
    10. Img.Image = My.Resources.Pict2
    11. End Select
    Du könntest ein Array mit allen Bildern machen und dann immer bei einem Klick auf Weiter, bzw. Zurück das Bild vom Array laden. Der Weiter-Button erhöht eigentlich immer den Index vom angezeigten Bild im Array.

    VB.NET-Quellcode

    1. Dim Bilder() As Image



    Grüsse
    Pascal
    Du hast drei Ansätze bekommen, auch wenn Ansatz 1 und 2 so wie sie dastehen nicht funktionieren werden.
    Aber mit ein bissi denken , schaffst das schon.
    Das ist meine Signatur und sie wird wunderbar sein!

    VB.NET-Quellcode

    1. Private _currentpicture As Long = 0
    2. Private _pictures As List(Of Bitmap)


    VB.NET-Quellcode

    1. Private Function NextPicture () As BitMap
    2. _currentpicture += 1
    3. Return _pictures(_currentpicture)
    4. end Function


    Aufruf :

    VB.NET-Quellcode

    1. PictureBox1.Image = NextPicture()

    So in der art sollte es gehen ... müsstest dann bloß deine Bilder in _pictures laden
    Ich bin Heut mal ganz besonders nett =D

    VB.NET-Quellcode

    1. Public Class Form1
    2. Dim i As Integer = 0
    3. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    4. i = i + 1
    5. Select Case i
    6. Case 1
    7. PictureBox1.Image = My.Resources.Bildpart1
    8. Case 2
    9. PictureBox1.Image = My.Resources.Bildpart2
    10. Case 3
    11. PictureBox1.Image = My.Resources.Bildpart3
    12. Case 4
    13. PictureBox1.Image = My.Resources.Bildpart4
    14. Case Else
    15. i = 0
    16. End Select
    17. End Sub
    18. End Class
    19. 'Erklärung:
    20. 'Ich deklariere einen Integer mit den Wert 0
    21. 'Wenn du den Button drückst wird er +1 gerechnet
    22. '(i[0] = i[0] + 1)
    23. 'Select Case ist wie eine Schublade
    24. 'Wenn i = 1 ist da tritt Case 1 in Kraft usw,
    25. 'Case Else ist dafür, falls nichts davon eintritt
    26. 'Dort wird der Integer wieder auf 0 gesetzt
    27. 'Da wir nur 4 Bilder haben die sich in den Re
    28. 'Sourcen befinden, optional der UrlPfad
    29. 'Select Case:
    30. 'Select Case ["Argument"] z.B eine Variable
    31. 'Case X "Wert"
    32. 'Code für das, was gemacht werden soll
    33. 'End Case "Hier ist Schluss"



    'Hoffentlich soweit alles Richtig, ich hab mir gedacht, wenn schon SourceCode, dann erklärt

    Sogar heut mal Kopierfertig Bild siehe anhang
    Bilder
    • Base.JPG

      17,41 kB, 299×299, 169 mal angesehen

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

    @Syhas
    Das ist doch völliger Quatsch... So muss er ja für jedes Bild ein Case erstellen....

    Machs lieber so:
    (KEIN C&P!!)

    VB.NET-Quellcode

    1. Dim i As Integer = 0
    2. Dim Bilder As New List(Of Bitmap) 'Alle Bilder, die du in die Galerie nehmen willst
    3. Button-Weiter-Klick:
    4. If Not i = Bilder.Count Then
    5. i += 1
    6. Picturebox1.Image = Bilder.Item(i)
    7. End If



    Grüsse
    Pascal
    Ich glaube nicht... und zudem wäre es nicht so elegant ;)
    Meiner Meinung nach sind Collections eine schönere Lösung, v.a. weil man auch direkt die Ressourcen auslesen kann

    VB.NET-Quellcode

    1. Dim resm As Resources.ResourceManager = New Resources.ResourceManager(Me.GetType)




    Grüsse
    Pascal

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. ind += 1
    3. If ind > ResourceList.Count - 1 Then ind = 0
    4. PictureBox1.Image = rm.GetObject(ResourceList(ind))
    5. End Sub
    6. Private rm As New ResourceManager("Galerie.Resources", GetType(Form1).Assembly) 'Dein Namespace.Resources und die Assembly
    7. Private ResourceList As New List(Of String)
    8. Private ind As Integer = 0
    9. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    10. Dim resourceSet As ResourceSet = rm.GetResourceSet(Thread.CurrentThread.CurrentUICulture, True, True)
    11. For Each n As DictionaryEntry In resourceSet
    12. If TypeOf (rm.GetObject(n.Key)) Is Bitmap Then ResourceList.Add(n.Key.ToString) 'prüfen nach Bitmaps
    13. Next
    14. If ResourceList.Count > 0 Then PictureBox1.Image = rm.GetObject(ResourceList(0))
    15. rm.ReleaseAllResources()
    16. End Sub


    So liest man alle Resourcennamen in eine Liste. In dem Fall , wenn nur Bitmaps drin sind, kann man so auf alle zugreifen ohne direkt von der Bezeichnung zu wissen.
    Ich kenn mich aber auch nicht bis ins Detail damit aus. Sollte es noch andere Resourcen geben, könnte man vorher noch mit TypeOf prüfen, was für Objektnamen man der Liste hinzufügt, und dann halt nur Bitmap zulassen.

    Gruß Mono
    Das ist meine Signatur und sie wird wunderbar sein!

    EDIT: Evtl so:

    Visual Basic Quellcode

    1



    Dim resman as ResourceManager = New ResourceManager(my.Resources)




    könnte sein...aber ich hab ja bereits My.Resources.ResourceManager geschrieben :P^^
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---