Bild in PictureBox anzeigen

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

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von shadow01.

    Bild in PictureBox anzeigen

    Hallo Zusammen

    Ich bin seit einiger Zeit am Versuchen "mit Buch und Google" Bilder in einer PictureBox anzuzeigen welches sich aus einer DB zusammensetzt und hoffe Ihr könnt mir nun weiterhelfen.

    Ich hebe eine OleDB unter Access erstellt. Ich habe darin eine Tabelle mit Name tbKatalog. Den Katalog lade ich im ersten Schritt in ein DGV was Super funktioniert.
    Danach mache ich eine Abfrage um in einem zweiten DGV die Einzelteile aus der tbEinzelteil abzufragen welche verwendet wurden um den Artikel im Katalog zu fertigen. Das geht auch noch.

    Nun will ich aber das in meiner PictureBox wenn ich im DGV vom Katalog klicke sich die dazugehörigen Bilder angezeigt bekomme.

    das versuche ich über die DGV1.CellClick zu realisieren.

    ich habe nun das hier versucht nach einigem Suchen leider ohne erfolg

    VB.NET-Quellcode

    1. Dim res As String = da2.ToString()
    2. PictureBox1.Image = Image.FromFile(res, ".jpg")


    VB.NET-Quellcode

    1. Imports System.IO
    2. Imports System
    3.  
    4. Public Class Form1
    5. 'Globale Variablen
    6. Dim con As New OleDbConnection
    7. Dim cmd As New OleDbCommand
    8. Public reader As OleDbDataReader
    9. Public cn As New OleDbConnection
    10. Public i As Integer
    11. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    12. Dim da As New OleDbDataAdapter
    13. Dim ds As New DataSet
    14. Dim dt As New DataTable
    15. con.ConnectionString = "Provider = Microsoft.ACE.OLEDB.12.0;" &
    16. "Data Source = UHPC_DB_20161001.accdb"
    17. da = New OleDbDataAdapter("SELECT tbKatalog.ID, Nummer, Artikel, MassEH, Bedarf, Kunde, Ptouch FROM tbKatalog, tbKunde, tbEinheit WHERE tbKunde.ID = tbKatalog.KundeID AND tbEinheit.ID = tbKatalog.MassEhID ", con)
    18. da.Fill(dt)
    19. DataGridView1.BorderStyle = BorderStyle.None
    20. DataGridView1.ColumnHeadersVisible = True
    21. DataGridView1.ColumnHeadersDefaultCellStyle.BackColor = Color.Black 'LightGray
    22. DataGridView1.ColumnHeadersDefaultCellStyle.ForeColor = Color.White
    23. DataGridView1.EnableHeadersVisualStyles = False
    24. DataGridView1.GridColor = Color.White 'LightGray
    25. DataGridView1.RowHeadersVisible = False
    26. DataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells
    27. DataGridView1.BackgroundColor = Color.White
    28. DataGridView1.RowsDefaultCellStyle.BackColor = Color.LightGray
    29. DataGridView1.AlternatingRowsDefaultCellStyle.BackColor = Color.White
    30. DataGridView1.DataSource = dt
    31. End Sub
    32. 'DataGridView anzeigen für alle artikel jedoch noch Probleme weill alle Instanzen aufgelistet werden daher ist die Listbox noch aktiv
    33. Private Sub DataGridView1_CellClick(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellClick
    34. Dim da As New OleDbDataAdapter
    35. Dim ds As New DataSet
    36. Dim dt As New DataTable
    37.  
    38. con.ConnectionString =
    39. "Provider=Microsoft.ACE.OLEDB.12.0;" &
    40. "Data Source = UHPC_DB_20161001.accdb"
    41.  
    42. da = New OleDbDataAdapter("SELECT tbEinzelteil.ID, ArtNr, ArtNrAlt, Bez, Firma, VE, MassEH, PreisVE, AnLager, Soll, Regal, Etage, Fach " &
    43. "FROM tbKatalog, tbEinzelteil, tbArtikelDetail, tbLieferant, tbEinheit " &
    44. "WHERE tbKatalog.ID Like '" &
    45. DataGridView1.CurrentCell.RowIndex + 1 & "'AND tbKatalog.ID = tbArtikelDetail.KatalogID AND tbEinzelteil.ID = tbArtikelDetail.EinzelteilID " &
    46. "AND tbLieferant.ID = tbEinzelteil.FirmaID AND tbEinheit.ID = tbEinzelteil.MassEhID ", con)
    47. Dim da2 As New OleDbDataAdapter("SELECT Nummer " &
    48. "FROM tbKatalog" &
    49. "WHERE tbKatalog.ID LIKE " &
    50. DataGridView1.CurrentCell.RowIndex + 1, con)
    51. da.Fill(dt)
    52. DataGridView2.DataSource = dt
    53. InitializeDataGridView()
    54. Dim res As String = da2.ToString()
    55. PictureBox1.Image = Image.FromFile(res, ".jpg") ', IO.FileMode.Open)
    56. End Sub
    Willkommen im Forum. :thumbup:

    shadow01 schrieb:

    VB.NET-Quellcode

    1. Dim res As String = da2.ToString()
    2. PictureBox1.Image = Image.FromFile(res, ".jpg")
    Welchen Inhalt hat der String res?
    Wo hast Du den Befehl .FromFile(res, ".jpg") her? Diese Syntax gibt es nämlich nicht, gugst Du hier. Da gehört ein True oder False hin.
    Mach zunächst Option Strict On, damit Du verstehst, was ich meine.
    Wo ist das Bild gespeichert, das Du anzeigen willst?
    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!
    Hallo RodFrimGermany

    Danke für die schnelle Antwort.
    res "soll" den Inhalt der Artikelnummer erhalten welcher mit (siehe unten) abgefragt wird

    VB.NET-Quellcode

    1. Dim da2 As New OleDbDataAdapter("SELECT Nummer " &
    2. "FROM tbKatalog" &
    3. "WHERE tbKatalog.ID LIKE " &
    4. DataGridView1.CurrentCell.RowIndex + 1, con)


    Jupp du hast recht ich habe das nun so korrigiert:

    VB.NET-Quellcode

    1. Dim res As String = da2.ToString()
    2. 'Dim folder As String = ""
    3. 'Dim filename As String = System.IO.Path.Combine(folder, id & ".jpg")
    4. Dim filename As String = System.IO.Path.Combine(res & ".jpg") '(folder, id & "*jpg")
    5. PictureBox1.Image = Image.FromFile(filename)


    Das Bild ist im Ordner Debug gespeichert.

    Ich vermute der Fehler passiert bei der Übergabe von da2 zur Variablen res

    Danke und Gruss

    shadow01 schrieb:

    Ich vermute der Fehler passiert bei der Übergabe von da2 zur Variablen res
    Vermuten nützt da nix.
    Überzeuge Dich davon, dass Dein Code das tun, was er tun soll, z.B. so:

    VB.NET-Quellcode

    1. Dim res As String = "Test" ' das ist mein Dateiname!!!
    2. Dim filename As String = System.IO.Path.Combine(res & ".jpg")
    3. MessageBox.Show(filename)
    4. PictureBox1.Image = Image.FromFile(filename)
    Dieser Code läuft genau so.
    Öffne den Explorer und sieh nach, ob die Datei da ist und wie ganz genau sie heißt.
    Ansonsten setze einen Haltepunkt in die Prozedur und steppe sie zeilenweise durch.
    Überzeuge Dich davon, dass Dein Code das tut, was Du glaubst dass er tuen soll :!:
    Lerne zu debuggen. Gugst Du hier.
    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!
    Hallo
    Sorry war in den Ferien.. daher lange keine Antwort! :)
    Nun aber funktioniert die Bilddarstellung super. Ich habe das Problem so gelöst:

    VB.NET-Quellcode

    1. '----------------------------Bild Anzeigen---------------------------
    2. Dim i2 As Integer
    3. Dim AktuelleZeile2 As String
    4. i2 = DataGridView1.CurrentRow.Index
    5. AktuelleZeile2 = DataGridView1.Item(1, i).Value
    6. Dim ConnectionString As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source = UHPC_DB_20161001.accdb"
    7. Dim sql As String = "SELECT Nummer FROM tbKatalog WHERE tbKatalog.Nummer Like " & AktuelleZeile2
    8. Dim conn As OleDbConnection = New OleDbConnection(ConnectionString)
    9. Dim file As String = sql
    10. Dim pfad As String = "Bilder"
    11. Dim filename As String = System.IO.Path.Combine(pfad, file.Remove(0, 57) & ".jpg")
    12. 'txtSearch.Text = filename
    13. If System.IO.File.Exists(filename) Then
    14. Try
    15. conn.Open()
    16. PictureBox1.Image = Image.FromFile(filename)
    17. PictureBox1.SizeMode = PictureBoxSizeMode.StretchImage
    18. PictureBox1.BorderStyle = BorderStyle.Fixed3D
    19. conn.Close()
    20. Catch ex As Exception
    21. MsgBox("FEHLER: Bitte Support kontaktieren: " & ex.ToString)
    22. End Try
    23. Else
    24. Try
    25. PictureBox1.Image = Image.FromFile("Bilder\no_image.jpg")
    26. Catch ex As Exception
    27. MsgBox("FEHLER: Bitte Support kontaktieren: " & ex.ToString)
    28. End Try
    29. End If
    30. conn.Close()


    eine Frage zum Posten habe ich noch immer wenn ich aus Visual Studio Express was hier in die VB.NET Klammer kommentiere werden Zeilenumbrüche erstellt. Wie kann ich den Code kopieren ohne das solche Zeilenumbrüche entstehen?

    Gruss und Danke nochmals