Verständnisproblem Picturebox

  • VB.NET
  • .NET (FX) 4.5–4.8

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

    Verständnisproblem Picturebox

    Guten Morgen Community,
    verstehe nicht warum ich 2 Button benötige um die Picturebox2 mit der Picturebox1 und den draufliegenden Labels zu füllen.
    Wenn ich den Code von Button2 mit in den Code von Button1 eintrage passiert nicht das was passiert wenn ich das über 2 Buttons löse.
    Selbst wenn ich ein Sub mit dem Inhalt von Button2 erstelle und den dann per Call aufrufe funktioniert die Befüllung der Picturebox2 nicht richtig.
    Nur wenn ich 2 Buttons habe. Das muss doch irgendwie machbar sein oder?
    Möchte das nämlich dann mit ner Do Until Schleife 100x ausführen und nicht 1x Button1 klicken dann 1x Button2 und dann wieder Button1 usw.
    Für Hilfe bin ich sehr dankbar.

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    3. Dim lines() As String = IO.File.ReadAllLines("Spielerdatenbank.txt")
    4. SpielerPosition.Text = lines(2)
    5. SpielerName.Text = lines(0)
    6. SpielerNation.Text = lines(1)
    7. CA.Text = lines(3)
    8. PA.Text = lines(4)
    9. If CA.Text = 1 And PA.Text = 1 Then
    10. PictureBox3.Image = My.Resources._1von1
    11. ElseIf CA.Text = 2 And PA.Text = 2 Then
    12. PictureBox3.Image = My.Resources._2von2
    13. ElseIf CA.Text = 3 And PA.Text = 3 Then
    14. PictureBox3.Image = My.Resources._3von3
    15. ElseIf CA.Text = 4 And PA.Text = 4 Then
    16. PictureBox3.Image = My.Resources._4von4
    17. ElseIf CA.Text = 5 And PA.Text = 5 Then
    18. PictureBox3.Image = My.Resources._5von5
    19. ElseIf CA.Text = 6 And PA.Text = 6 Then
    20. PictureBox3.Image = My.Resources._6von6
    21. End If
    22. SpielerPosition.TextAlign = ContentAlignment.MiddleCenter
    23. SpielerNation.TextAlign = ContentAlignment.MiddleCenter
    24. SpielerName.TextAlign = ContentAlignment.MiddleCenter
    25. End Sub
    26. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    27. Dim s As Size = PictureBox1.Size
    28. Dim memoryImage = New Bitmap(s.Width, s.Height)
    29. Dim memoryGraphics As Graphics = Graphics.FromImage(memoryImage)
    30. Dim ScreenPos As Point = Me.PictureBox1.PointToScreen(New Point(0, 0))
    31. memoryGraphics.CopyFromScreen(ScreenPos.X, ScreenPos.Y, 0, 0, s)
    32. PictureBox2.Image = memoryImage
    33. If IO.Directory.Exists(Application.StartupPath & "\Images\") = False Then
    34. IO.Directory.CreateDirectory(Application.StartupPath & "\Images\")
    35. End If
    36. Dim filename As String = Application.StartupPath & "\Images\" & Anzahl.Text & ".jpeg"
    37. PictureBox2.Image.Save(filename, System.Drawing.Imaging.ImageFormat.Jpeg)
    38. Anzahl.Text = Anzahl.Text + 1
    39. Dim lines As System.Collections.Generic.List(Of String) _
    40. = System.Text.RegularExpressions.Regex.Split _
    41. (My.Computer.FileSystem.ReadAllText("Spielerdatenbank.txt"), vbCrLf).ToList
    42. lines.RemoveAt(0)
    43. lines.RemoveAt(0)
    44. lines.RemoveAt(0)
    45. lines.RemoveAt(0)
    46. lines.RemoveAt(0)
    47. My.Computer.FileSystem.WriteAllText("Spielerdatenbank.txt", String.Join(vbCrLf, lines.ToArray), False)
    48. End Sub

    @MisterRieus Wie ist die Ausgangslage?
    Was genau soll passieren?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Es gibt eine Text Datei mitvon mir eingegebenen Werten.
    Name
    Nation
    Position
    CA
    PA
    Und das ganze 206x mit anderen Werten
    Nun gibt es eine Form mit einer Picturebox die mit folgendem befüllt wird:


    Und anhand der Werte in der Text Datei soll dann am Ende ein Bild gespeichert werden das so aussieht:
    Da die ersten 5 Werte der Text Datei so aussehen:
    Thiemann
    GER
    MIT
    2
    2


    Das klappt ja auch alles soweit nur halt muss ich damit ein Bild gespeichert wird halt immer für einen Spieler manuell 2 Buttons drücken.
    Hätte das gerne das ich 1x einen Button drücke und dann automatisch 206 Bilder erstellt werden mit den Werten aus der Text Datei.
    @MisterRieus Vielleicht mal ein paar grundsätzliche Sachen:
    Du vergleichst Strings mit numerischen Werten. => Option Strict On :!:
    Visual Studio - Empfohlene Einstellungen
    Vielleicht ist es besser, Du machst Dir ein UserControl mit dem leeren Bild als BackgroundImage und Deinen Labels.
    Gib den Labels den Text "" und .BackColor = Color.Transparent.
    Dann machst Du Dir in dem UserControl ne Prozedur Clear() und SetText(...), wo das passieren soll, was halt passieren soll.
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class UserControl1
    2. Private Sub UserControl1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    3. Label1.BackColor = Color.Transparent
    4. End Sub
    5. Public Sub Clear()
    6. Label1.Text = ""
    7. End Sub
    8. Public Sub SetText(txt As String)
    9. Label1.Text = txt
    10. End Sub
    11. End Class
    und feddich.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Option Script On vergesse ich jedes Mal, Danke!
    Ja das mit dem Backgroundimage habe ich davor probiert und klappte das mit dem Bild speichern nicht.
    Vom Prinzip funktioniert ja alles wie ich es haben möchte nur halt das es nicht klappt wenn ich beide Buttoncodes in einen Button schreibe.
    Wenn das nicht klappt mit dem einen Button dann werde ich halt 412x den Button klicken.

    MisterRieus schrieb:

    vergesse ich jedes Mal
    Richte Dein Studio so ein, dass das niemal mehr passiert!
    ====
    Ich glaube, wir reden aneinander vorbei.
    Poste mal Dein Projekt bereinigt, ohne .vs, obj und bin-Verzeichnisse als ZIP, dazu eine abgespeckte Spielerdatenbank.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Was enthält jetzt PicBox1, PicBox2 und PicBox3? Fehlt da vielleicht einfach nur ein PictureBox3.Refresh, bevor der Copy-Kram angewendet wird?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @MisterRieus Nutze bitte die Dateianhangs-Funktionalität des Forums:
    Erweiterte Antwort => Dateianhänge => Hochladen.
    Wenn Dein Hoster Deine Bilder löscht, ist dieser Thread quasi leer.
    Editiere Deinen Post entsprechend.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Mh anscheinend ja ^^
    Vom Prinzip will ich nur wissen warum das funktioiert

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    3. Dim lines() As String = IO.File.ReadAllLines("Spielerdatenbank.txt")
    4. SpielerPosition.Text = lines(2)
    5. SpielerName.Text = lines(0)
    6. SpielerNation.Text = lines(1)
    7. CA.Text = lines(3)
    8. PA.Text = lines(4)
    9. If CA.Text = 1 And PA.Text = 1 Then
    10. PictureBox3.Image = My.Resources._1von1
    11. ElseIf CA.Text = 2 And PA.Text = 2 Then
    12. PictureBox3.Image = My.Resources._2von2
    13. ElseIf CA.Text = 3 And PA.Text = 3 Then
    14. PictureBox3.Image = My.Resources._3von3
    15. ElseIf CA.Text = 4 And PA.Text = 4 Then
    16. PictureBox3.Image = My.Resources._4von4
    17. ElseIf CA.Text = 5 And PA.Text = 5 Then
    18. PictureBox3.Image = My.Resources._5von5
    19. ElseIf CA.Text = 6 And PA.Text = 6 Then
    20. PictureBox3.Image = My.Resources._6von6
    21. End If
    22. SpielerPosition.TextAlign = ContentAlignment.MiddleCenter
    23. SpielerNation.TextAlign = ContentAlignment.MiddleCenter
    24. SpielerName.TextAlign = ContentAlignment.MiddleCenter
    25. End Sub
    26. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    27. Dim s As Size = PictureBox1.Size
    28. Dim memoryImage = New Bitmap(s.Width, s.Height)
    29. Dim memoryGraphics As Graphics = Graphics.FromImage(memoryImage)
    30. Dim ScreenPos As Point = Me.PictureBox1.PointToScreen(New Point(0, 0))
    31. memoryGraphics.CopyFromScreen(ScreenPos.X, ScreenPos.Y, 0, 0, s)
    32. PictureBox2.Image = memoryImage
    33. If IO.Directory.Exists(Application.StartupPath & "\Images\") = False Then
    34. IO.Directory.CreateDirectory(Application.StartupPath & "\Images\")
    35. End If
    36. Dim filename As String = Application.StartupPath & "\Images\" & Anzahl.Text & ".jpeg"
    37. PictureBox2.Image.Save(filename, System.Drawing.Imaging.ImageFormat.Jpeg)
    38. Anzahl.Text = Anzahl.Text + 1
    39. Dim lines As System.Collections.Generic.List(Of String) _
    40. = System.Text.RegularExpressions.Regex.Split _
    41. (My.Computer.FileSystem.ReadAllText("Spielerdatenbank.txt"), vbCrLf).ToList
    42. lines.RemoveAt(0)
    43. lines.RemoveAt(0)
    44. lines.RemoveAt(0)
    45. lines.RemoveAt(0)
    46. lines.RemoveAt(0)
    47. My.Computer.FileSystem.WriteAllText("Spielerdatenbank.txt", String.Join(vbCrLf, lines.ToArray), False)
    48. End Sub

    und das hier nicht

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    3. Dim lines() As String = IO.File.ReadAllLines("Spielerdatenbank.txt")
    4. SpielerPosition.Text = lines(2)
    5. SpielerName.Text = lines(0)
    6. SpielerNation.Text = lines(1)
    7. CA.Text = lines(3)
    8. PA.Text = lines(4)
    9. If CA.Text = 1 And PA.Text = 1 Then
    10. PictureBox3.Image = My.Resources._1von1
    11. ElseIf CA.Text = 2 And PA.Text = 2 Then
    12. PictureBox3.Image = My.Resources._2von2
    13. ElseIf CA.Text = 3 And PA.Text = 3 Then
    14. PictureBox3.Image = My.Resources._3von3
    15. ElseIf CA.Text = 4 And PA.Text = 4 Then
    16. PictureBox3.Image = My.Resources._4von4
    17. ElseIf CA.Text = 5 And PA.Text = 5 Then
    18. PictureBox3.Image = My.Resources._5von5
    19. ElseIf CA.Text = 6 And PA.Text = 6 Then
    20. PictureBox3.Image = My.Resources._6von6
    21. End If
    22. SpielerPosition.TextAlign = ContentAlignment.MiddleCenter
    23. SpielerNation.TextAlign = ContentAlignment.MiddleCenter
    24. SpielerName.TextAlign = ContentAlignment.MiddleCenter
    25. Dim s As Size = PictureBox1.Size
    26. Dim memoryImage = New Bitmap(s.Width, s.Height)
    27. Dim memoryGraphics As Graphics = Graphics.FromImage(memoryImage)
    28. Dim ScreenPos As Point = Me.PictureBox1.PointToScreen(New Point(0, 0))
    29. memoryGraphics.CopyFromScreen(ScreenPos.X, ScreenPos.Y, 0, 0, s)
    30. PictureBox2.Image = memoryImage
    31. If IO.Directory.Exists(Application.StartupPath & "\Images\") = False Then
    32. IO.Directory.CreateDirectory(Application.StartupPath & "\Images\")
    33. End If
    34. Dim filename As String = Application.StartupPath & "\Images\" & Anzahl.Text & ".jpeg"
    35. PictureBox2.Image.Save(filename, System.Drawing.Imaging.ImageFormat.Jpeg)
    36. Anzahl.Text = Anzahl.Text + 1
    37. Dim lines As System.Collections.Generic.List(Of String) _
    38. = System.Text.RegularExpressions.Regex.Split _
    39. (My.Computer.FileSystem.ReadAllText("Spielerdatenbank.txt"), vbCrLf).ToList
    40. lines.RemoveAt(0)
    41. lines.RemoveAt(0)
    42. lines.RemoveAt(0)
    43. lines.RemoveAt(0)
    44. lines.RemoveAt(0)
    45. My.Computer.FileSystem.WriteAllText("Spielerdatenbank.txt", String.Join(vbCrLf, lines.ToArray), False)
    46. End Sub


    Komplett gleicher Code, aber das gespeicherte Bild von dem 2. hier ist ohne Namen ohne Position ohne alles.
    Mehr will ich gar nicht wissen, weil es ja soweit funktioniert ^^

    Aber wenn es helfen sollte werde ich morgen mal das Projekt hochladen.
    @MisterRieus Wichtig sind hier auch die Designer-Angaben, die sind hier nicht gepostet.
    Deswegen wäre das Projekt als solches schon interessant.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    VaporiZed schrieb:

    Was enthält jetzt PicBox1, PicBox2 und PicBox3? Fehlt da vielleicht einfach nur ein PictureBox3.Refresh, bevor der Copy-Kram angewendet wird?


    @VaporiZed Picturebox3 sind die Sterne oben auf der Karte.
    Picturebox1 ist das Bild ohne Namen , Position usw.
    Picturebox2 ist dann das Bild von 1 mit den Namen, Position, Nation und die Sterne oben.
    @MisterRieus Und jetzt beschreib mal Dein Anliegen verbal ohne Verwendung von .NET-Termini.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @MisterRieus
    Das Problem liegt IMHO daran, dass die Form bei einen Button nach dem Befüllen und vor dem ScreenShot nicht aktualisiert wird. Ein Me.Refresh könnte da vielleicht Abhilfe schaffen.

    Ich würde aber das ganze mit den multiplen Pictureboxen und ScreenShot verwerfen, und direkt auf das Bild schreiben (mit g.DrawImage und g.DrawString).
    Damit könnte man sich sogar die visuelle Ausgabe sparen.
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class Form1
    2. Dim DBPath As String = IO.Path.Combine(Application.StartupPath, "Spielerdatenbank.txt")
    3. Dim ImagesPath As String = IO.Path.Combine(Application.StartupPath, "Images")
    4. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    5. 'Daten einlesen
    6. Dim lines As List(Of String) = IO.File.ReadAllLines(DBPath).ToList
    7. If lines.Count < 5 Then End
    8. Dim SpielerName As String = lines(0)
    9. Dim SpielerNation As String = lines(1)
    10. Dim SpielerPosition As String = lines(2)
    11. Dim CA As Integer = CInt(lines(3))
    12. Dim PA As Integer = CInt(lines(4))
    13. 'tbSpielerPosition.Text = SpielerPosition
    14. 'tbSpielerNation.Text = SpielerNation
    15. 'tbSpielerName.Text = SpielerName
    16. 'tbCA.Text = CA.ToString
    17. 'tbPA.Text = PA.ToString
    18. 'Bild erstellen
    19. 'Dim s As Size = PictureBox1.Size
    20. 'Dim Result As New Bitmap(s.Width, s.Height)
    21. Dim Result As New Bitmap(208, 321)
    22. Dim g As Graphics = Graphics.FromImage(Result)
    23. g.SmoothingMode = Drawing2D.SmoothingMode.HighQuality
    24. g.DrawImage(My.Resources.shirt_empty, 0, 0)
    25. 'Sterne auf Bild kopieren
    26. Dim Layer As Bitmap = Nothing
    27. If CA = 1 AndAlso PA = 1 Then
    28. Layer = New Bitmap(My.Resources._1von1)
    29. ElseIf CA = 2 AndAlso PA = 2 Then
    30. Layer = New Bitmap(My.Resources._2von2)
    31. ElseIf CA = 3 AndAlso PA = 3 Then
    32. Layer = New Bitmap(My.Resources._3von3)
    33. ElseIf CA = 4 AndAlso PA = 4 Then
    34. Layer = New Bitmap(My.Resources._4von4)
    35. ElseIf CA = 5 AndAlso PA = 5 Then
    36. Layer = New Bitmap(My.Resources._5von5)
    37. ElseIf CA = 6 AndAlso PA = 6 Then
    38. Layer = New Bitmap(My.Resources._6von6)
    39. End If
    40. g.DrawImage(Layer, 16, 16)
    41. Layer = Nothing
    42. 'Schriften definieren
    43. Dim myFontName As Font = New Font("Arial", 20, FontStyle.Bold, GraphicsUnit.Pixel)
    44. Dim myPosition As Font = New Font("Arial", 24, FontStyle.Bold, GraphicsUnit.Pixel)
    45. Dim myNation As Font = New Font("Arial", 10, FontStyle.Bold, GraphicsUnit.Pixel)
    46. Dim stringFormat As New StringFormat()
    47. stringFormat.Alignment = StringAlignment.Center
    48. stringFormat.LineAlignment = StringAlignment.Center
    49. 'Positionen der Texte definiefern
    50. Dim rectName As New Rectangle(16, 271, 175, 34)
    51. Dim rectPosition As New Rectangle(57, 159, 96, 24)
    52. Dim rectNation As New Rectangle(57, 226, 96, 11)
    53. 'Texte auf Bild schreiben
    54. g.DrawString(SpielerName, myFontName, Brushes.Black, rectName, stringFormat)
    55. g.DrawString(SpielerPosition, myPosition, Brushes.Black, rectPosition, stringFormat)
    56. g.DrawString(SpielerNation, myNation, Brushes.Black, rectNation, stringFormat)
    57. 'PictureBox1.Image = Result
    58. 'Bild speichern
    59. If Not IO.Directory.Exists(ImagesPath) Then
    60. IO.Directory.CreateDirectory(ImagesPath)
    61. End If
    62. Dim zaehler As Integer = 1
    63. Dim saveFileName As String = IO.Path.Combine(ImagesPath, CStr(zaehler) & ".jpeg")
    64. Dim filename2 As String = saveFileName
    65. Do Until Not IO.File.Exists(filename2)
    66. zaehler += 1
    67. filename2 = IO.Path.Combine(ImagesPath, CStr(zaehler) & ".jpeg")
    68. Loop
    69. saveFileName = filename2
    70. 'PictureBox1.Image.Save(saveFileName, Drawing.Imaging.ImageFormat.Jpeg)
    71. Result.Save(saveFileName, Drawing.Imaging.ImageFormat.Jpeg)
    72. 'Daten aus Datenbank entfernen
    73. lines.RemoveAt(0)
    74. lines.RemoveAt(0)
    75. lines.RemoveAt(0)
    76. lines.RemoveAt(0)
    77. lines.RemoveAt(0)
    78. IO.File.WriteAllLines(DBPath, lines)
    79. End Sub
    80. End Class
    @HenryV Das ist perfekt! Wirklich genial! Danke dir!
    Und ich hab es soweit auch verstanden! :)
    Nur eins versteh ich nicht und zwar wollte ich eine If Abfrage starten um zu checken welche Position der Spieler hat und je nach Position hat das Trikot eine andere Farbe,
    aber sobald ich eine If Abfrage mache, werden die gespeicherten Bilder immer schwarz. Woran liegt das?
    @MisterRieus

    RodFromGermany schrieb:

    Nutze bitte die Dateianhangs-Funktionalität des Forums:
    Erweiterte Antwort => Dateianhänge => Hochladen.
    Wenn Dein Hoster Deine Bilder löscht, ist dieser Thread quasi leer.
    Editiere gefälligst Deine Posts entsprechend.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @MisterRieus
    Ich habe einen kurzen Test gemacht.

    VB.NET-Quellcode

    1. g.DrawImage(My.Resources.shirt_empty, 0, 0)

    ersetzt mit

    VB.NET-Quellcode

    1. 'Trikotfarbe bestimmen
    2. Dim MainLayer As Bitmap = Nothing
    3. Select Case SpielerPosition
    4. Case "ANG"
    5. MainLayer = New Bitmap(My.Resources.shirt_ANG)
    6. Case "VER"
    7. MainLayer = New Bitmap(My.Resources.shirt_VER)
    8. Case "MIT"
    9. MainLayer = New Bitmap(My.Resources.shirt_MIT)
    10. Case "TOR"
    11. MainLayer = New Bitmap(My.Resources.shirt_TOR)
    12. Case Else
    13. MainLayer = New Bitmap(My.Resources.shirt_empty)
    14. End Select
    15. g.DrawImage(MainLayer, 0, 0)
    16. MainLayer = Nothing

    Und es hat eigentlich funktioniert.
    Vielleicht liegt es an deiner Abfrage oder an den Bildern. Aber ohne deinen Code und die Bilder zu kennen, wird es schwierig eine treffende Aussage zu machen.

    VB.NET-Quellcode

    1. Public Class Form1
    2. Dim DBPath As String = IO.Path.Combine(Application.StartupPath, "Spielerdatenbank.txt")
    3. Dim ImagesPath As String = IO.Path.Combine(Application.StartupPath, "Images")
    4. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    5. 'Daten einlesen
    6. Dim lines As List(Of String) = IO.File.ReadAllLines(DBPath).ToList
    7. If lines.Count < 5 Then End
    8. Dim SpielerName As String = lines(0)
    9. Dim SpielerNation As String = lines(1)
    10. Dim SpielerPosition As String = lines(2)
    11. Label1.text = lines(2)
    12. Dim CA As Integer = CInt(lines(3))
    13. Dim PA As Integer = CInt(lines(4))
    14. 'tbSpielerPosition.Text = SpielerPosition
    15. 'tbSpielerNation.Text = SpielerNation
    16. 'tbSpielerName.Text = SpielerName
    17. 'tbCA.Text = CA.ToString
    18. 'tbPA.Text = PA.ToString
    19. 'Bild erstellen
    20. 'Dim s As Size = PictureBox1.Size
    21. 'Dim Result As New Bitmap(s.Width, s.Height)
    22. Dim Result As New Bitmap(208, 321)
    23. Dim g As Graphics = Graphics.FromImage(Result)
    24. g.SmoothingMode = Drawing2D.SmoothingMode.HighQuality
    25. If label1.text = "ABW" then
    26. g.DrawImage(My.Resources.shirt_red, 0, 0)
    27. elseIf label1.text = "MIT" then
    28. g.DrawImage(My.Resources.shirt_blue, 0, 0)
    29. elseIf label1.text = "ANG" then
    30. g.DrawImage(My.Resources.shirt_green, 0, 0)
    31. elseIf label1.text = "TW" then
    32. g.DrawImage(My.Resources.shirt_black, 0, 0)
    33. end if


    Bei deiner Select/Case Variante fehlt doch die Zuordnung zu der eingelesenen Position oder nicht?
    Oh hab ich auf dem Handy gar nicht wahrgenommen. Sry

    VB.NET-Quellcode

    1. Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
    2. 'Daten einlesen
    3. Dim lines As List(Of String) = IO.File.ReadAllLines(DBPath).ToList
    4. If lines.Count < 5 Then End
    5. Dim SpielerName As String = lines(0)
    6. Dim SpielerNation As String = lines(1)
    7. Dim SpielerPosition As String = lines(2)
    8. Dim CA As Integer = CInt(lines(3))
    9. Dim PA As Integer = CInt(lines(4))
    10. 'tbSpielerPosition.Text = SpielerPosition
    11. 'tbSpielerNation.Text = SpielerNation
    12. 'tbSpielerName.Text = SpielerName
    13. 'tbCA.Text = CA.ToString
    14. 'tbPA.Text = PA.ToString
    15. 'Bild erstellen
    16. 'Dim s As Size = PictureBox1.Size
    17. 'Dim Result As New Bitmap(s.Width, s.Height)
    18. Dim Result As New Bitmap(208, 321)
    19. Dim g As Graphics = Graphics.FromImage(Result)
    20. g.SmoothingMode = Drawing2D.SmoothingMode.HighQuality
    21. Dim MainLayer As Bitmap = Nothing
    22. Select Case SpielerPosition
    23. Case "ANG"
    24. MainLayer = New Bitmap(My.Resources.red)
    25. Case "VER"
    26. MainLayer = New Bitmap(My.Resources.blue)
    27. Case "MIT"
    28. MainLayer = New Bitmap(My.Resources.green)
    29. Case "TOR"
    30. MainLayer = New Bitmap(My.Resources.yellow)
    31. Case Else
    32. MainLayer = New Bitmap(My.Resources.DoubleManagerSpieler)
    33. End Select
    34. g.DrawImage(MainLayer, 0, 0)
    35. MainLayer = Nothing
    36. 'Sterne auf Bild kopieren
    37. Dim Layer As Bitmap = Nothing
    38. If CA = 1 AndAlso PA = 1 Then
    39. Layer = New Bitmap(My.Resources._1von1)
    40. ElseIf CA = 2 AndAlso PA = 2 Then
    41. Layer = New Bitmap(My.Resources._2von2)
    42. ElseIf CA = 3 AndAlso PA = 3 Then
    43. Layer = New Bitmap(My.Resources._3von3)
    44. ElseIf CA = 4 AndAlso PA = 4 Then
    45. Layer = New Bitmap(My.Resources._4von4)
    46. ElseIf CA = 5 AndAlso PA = 5 Then
    47. Layer = New Bitmap(My.Resources._5von5)
    48. ElseIf CA = 6 AndAlso PA = 6 Then
    49. Layer = New Bitmap(My.Resources._6von6)
    50. End If
    51. g.DrawImage(Layer, 16, 16)
    52. Layer = Nothing
    53. 'Schriften definieren
    54. Dim myFontName As Font = New Font("Arial", 20, FontStyle.Bold, GraphicsUnit.Pixel)
    55. Dim myPosition As Font = New Font("Arial", 24, FontStyle.Bold, GraphicsUnit.Pixel)
    56. Dim myNation As Font = New Font("Arial", 10, FontStyle.Bold, GraphicsUnit.Pixel)
    57. Dim stringFormat As New StringFormat()
    58. stringFormat.Alignment = StringAlignment.Center
    59. stringFormat.LineAlignment = StringAlignment.Center
    60. 'Positionen der Texte definiefern
    61. Dim rectName As New Rectangle(16, 271, 175, 34)
    62. Dim rectPosition As New Rectangle(57, 159, 96, 24)
    63. Dim rectNation As New Rectangle(57, 226, 96, 11)
    64. 'Texte auf Bild schreiben
    65. g.DrawString(SpielerName, myFontName, Brushes.Black, rectName, stringFormat)
    66. g.DrawString(SpielerPosition, myPosition, Brushes.Black, rectPosition, stringFormat)
    67. g.DrawString(SpielerNation, myNation, Brushes.Black, rectNation, stringFormat)
    68. 'PictureBox1.Image = Result
    69. 'Bild speichern
    70. If Not IO.Directory.Exists(ImagesPath) Then
    71. IO.Directory.CreateDirectory(ImagesPath)
    72. End If
    73. Dim zaehler As Integer = 1
    74. Dim saveFileName As String = IO.Path.Combine(ImagesPath, CStr(zaehler) & ".jpeg")
    75. Dim filename2 As String = saveFileName
    76. Do Until Not IO.File.Exists(filename2)
    77. zaehler += 1
    78. filename2 = IO.Path.Combine(ImagesPath, CStr(zaehler) & ".jpeg")
    79. Loop
    80. saveFileName = filename2
    81. 'PictureBox1.Image.Save(saveFileName, Drawing.Imaging.ImageFormat.Jpeg)
    82. Result.Save(saveFileName, Drawing.Imaging.ImageFormat.Jpeg)
    83. 'Daten aus Datenbank entfernen
    84. lines.RemoveAt(0)
    85. lines.RemoveAt(0)
    86. lines.RemoveAt(0)
    87. lines.RemoveAt(0)
    88. lines.RemoveAt(0)
    89. IO.File.WriteAllLines(DBPath, lines)
    90. End Sub


    Mit deinem/diesem Code sind alle erstellten Bilder mit dem leeren Trikot und nicht je nach Position in der zugewiesenen Farbe.
    Da ich nicht wusste wie die Abkürzungen der Zuordnung sind, habe ich "ANG" "VER" "MIT" und "TOR" angenommen.
    Diese musst du aber nach deinen anpassen. Sehr wahrscheinlich zu "ANG" "ABW" "MIT" und "TW".
    Andernfalls setze einmal einen Haltepunkt und schau dir den Inhalt der Variable SpielerPosition an. Debuggen, Fehler finden und beseitigen