Kopieren von einem Bild und dann wieder Laden

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Kopieren von einem Bild und dann wieder Laden

    Hallo liebe VB-Paradieser,

    ich hab mal wieder ein kleines Problem mit meinem Programm..
    Das letzte "Problem" habe ich selber gelöst doch jetzt weiß ich echt nicht mehr weiter T_T..

    Ich bin dabei für mein Programm eine Einstellung-Form zu erstellen.
    Dort sind einige Dinge die in einer config.cfg gespeichert werden.
    Soweit so gut, doch soll man dort auch das Logo ändern können.
    Das gewählte Logo ist laut Programm-Standard ein .png und wird rechts neben den Textboxen und Labels
    in einer Picturebox angezeigt. Da drunter befindet sich ein button welcher ein OpenFileDialog in gang setzt.

    Nun will ich das gewählte Bild mit dem logo ersetzen..

    VB.NET-Quellcode

    1. OpenFileDialog1.ShowDialog()
    2. Dim path As String = OpenFileDialog1.FileName.ToString
    3. MsgBox(path)
    4. Try
    5. Dim load As Bitmap = My.Resources.load
    6. PictureBox1.Dispose()
    7. PictureBox1.Refresh()
    8. PictureBox1.Image = Load
    9. PictureBox1.SizeMode = PictureBoxSizeMode.StretchImage
    10. PictureBox1.Refresh()
    11. PictureBox1.ImageLocation = load.ToString
    12. PictureBox1.Refresh()
    13. Catch ex As Exception
    14. End Try
    15. Try
    16. File.Copy(path, My.Computer.FileSystem.CurrentDirectory + "/config/logo2.png", True)
    17. PictureBox1.Dispose()
    18. PictureBox1.Image = New Bitmap("config/logo2.png")
    19. PictureBox1.SizeMode = PictureBoxSizeMode.StretchImage
    20. PictureBox1.Refresh()
    21. If My.Computer.FileSystem.FileExists("config/logo.png") Then
    22. My.Computer.FileSystem.DeleteFile("config/logo.png")
    23. End If
    24. File.Copy(My.Computer.FileSystem.CurrentDirectory + "/config/logo2.png", My.Computer.FileSystem.CurrentDirectory + "/config/logo.png", True)
    25. PictureBox1.Image = New Bitmap("config/logo.png")
    26. PictureBox1.SizeMode = PictureBoxSizeMode.StretchImage
    27. PictureBox1.Refresh()
    28. If My.Computer.FileSystem.FileExists("config/logo2.png") Then
    29. My.Computer.FileSystem.DeleteFile("config/logo2.png")
    30. End If
    31. MsgBox("Firmenlogo wurde geändert und gespeichert")
    32. Catch ex As Exception
    33. MsgBox(ex.Message)
    34. MsgBox("Es ist ein fehler aufgetreten. Bitte ersetzen Sie die Datei per Hand.")
    35. MsgBox("Benennen sie ihre Bilddatei in ''logo.png'' um und ziehen Sie diese in:" & vbNewLine & My.Computer.FileSystem.CurrentDirectory & "\config")
    36. MsgBox("Ersetzen Sie ggf. die vorhandene Datei und starten Sie das Programm neu.")
    37. End Try
    38. Try
    39. PictureBox1.Refresh()
    40. PictureBox1.Image = New Bitmap("config/logo.png")
    41. PictureBox1.SizeMode = PictureBoxSizeMode.StretchImage
    42. PictureBox1.Refresh()
    43. Catch ex As Exception
    44. End Try



    Ich habe, da es so nicht ging mit dem einfachen FileCopy - Umbennen und ersetzen, versucht es wie oben zu machen.
    doch bekomme ich noch immer den Selben Fehler, das auf logo.png nicht zugegriffen werden kann, weil bereits ein anderer Prozess drauf zugreift..
    ich habe versucht es mit picturebox1.dispose() freizugeben aber es hat auch nicht geklappt..

    help..


    Edit: Hier mal der ganze Source der Form, vielleicht hilft das weiter .. :/


    VB.NET-Quellcode

    1. Imports System.IO
    2. Public Class einstellungen
    3. Dim compname As String
    4. Dim ustid As String
    5. Dim anschr As String
    6. Dim plzort As String
    7. Dim phonenr As String
    8. Private Sub einstellungen_FormClosing(sender As Object, e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
    9. mainstage.Show()
    10. End Sub
    11. Private Sub einstellungen_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    12. Dim reader As New StreamReader("config/config.cfg")
    13. compname = reader.ReadLine()
    14. ustid = reader.ReadLine()
    15. plzort = reader.ReadLine()
    16. anschr = reader.ReadLine()
    17. phonenr = reader.ReadLine()
    18. reader.Close()
    19. TextBox1.Text = compname
    20. TextBox2.Text = plzort
    21. TextBox3.Text = anschr
    22. TextBox4.Text = phonenr
    23. TextBox5.Text = ustid
    24. Try
    25. PictureBox1.Refresh()
    26. PictureBox1.Image = New Bitmap("config/logo.png")
    27. PictureBox1.SizeMode = PictureBoxSizeMode.StretchImage
    28. PictureBox1.Refresh()
    29. Catch ex As Exception
    30. End Try
    31. End Sub
    32. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    33. OpenFileDialog1.ShowDialog()
    34. Dim path As String = OpenFileDialog1.FileName
    35. 'MsgBox(path)
    36. Try
    37. PictureBox1.Refresh()
    38. PictureBox1.Image = New Bitmap(My.Resources.load)
    39. PictureBox1.SizeMode = PictureBoxSizeMode.StretchImage
    40. PictureBox1.Refresh()
    41. Catch ex As Exception
    42. MsgBox(ex.Message)
    43. End Try
    44. Try
    45. File.Copy(path, My.Computer.FileSystem.CurrentDirectory + "/config/logo2.png", True)
    46. PictureBox1.Dispose()
    47. PictureBox1.Image = New Bitmap("config/logo2.png")
    48. PictureBox1.SizeMode = PictureBoxSizeMode.StretchImage
    49. PictureBox1.Refresh()
    50. If My.Computer.FileSystem.FileExists("config/logo.png") Then
    51. My.Computer.FileSystem.DeleteFile("config/logo.png")
    52. End If
    53. File.Copy(My.Computer.FileSystem.CurrentDirectory + "/config/logo2.png", My.Computer.FileSystem.CurrentDirectory + "/config/logo.png", True)
    54. PictureBox1.Image = New Bitmap("config/logo.png")
    55. PictureBox1.SizeMode = PictureBoxSizeMode.StretchImage
    56. PictureBox1.Refresh()
    57. If My.Computer.FileSystem.FileExists("config/logo2.png") Then
    58. My.Computer.FileSystem.DeleteFile("config/logo2.png")
    59. End If
    60. MsgBox("Firmenlogo wurde geändert und gespeichert")
    61. Catch ex As Exception
    62. MsgBox(ex.Message)
    63. MsgBox("Es ist ein fehler aufgetreten. Bitte ersetzen Sie die Datei per Hand.")
    64. MsgBox("Benennen sie ihre Bilddatei in ''logo.png'' um und ziehen Sie diese in:" & vbNewLine & My.Computer.FileSystem.CurrentDirectory & "\config")
    65. MsgBox("Ersetzen Sie ggf. die vorhandene Datei und starten Sie das Programm neu.")
    66. End Try
    67. Try
    68. PictureBox1.Refresh()
    69. PictureBox1.Image = New Bitmap("config/logo.png")
    70. PictureBox1.SizeMode = PictureBoxSizeMode.StretchImage
    71. PictureBox1.Refresh()
    72. Catch ex As Exception
    73. End Try
    74. End Sub
    75. Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
    76. compname = TextBox1.Text
    77. ustid = TextBox5.Text
    78. plzort = TextBox2.Text
    79. anschr = TextBox3.Text
    80. phonenr = TextBox4.Text
    81. If MsgBox("Sind die eingetragenen Daten korrekt?" + vbNewLine + compname + vbNewLine + plzort + vbNewLine + anschr + vbNewLine + phonenr + vbNewLine + ustid, MsgBoxStyle.YesNo, "Überprüfen Sie bitte.") = MsgBoxResult.Yes Then
    82. Try
    83. Dim writer As New StreamWriter("config/config.cfg")
    84. writer.WriteLine(compname)
    85. writer.WriteLine(ustid)
    86. writer.WriteLine(plzort)
    87. writer.WriteLine(anschr)
    88. writer.WriteLine(phonenr)
    89. writer.Close()
    90. MsgBox("Erfolgreich gespeichert")
    91. mainstage.Show()
    92. Me.Close()
    93. Catch ex As Exception
    94. MsgBox(ex.Message)
    95. End Try
    96. Else
    97. Return
    98. End If
    99. End Sub
    100. End Class
    Viele Frauen kamen, viele sind gegangen, eine ist geblieben 12.5.12 <3 ich liebe dich Schatz :love: :love:

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

    1. Benenne deine Controls richtig. Das ist ziemlich unübersichtlich.
    2. Setze Option Strict auf On.
    3. Ersetze :

    VB.NET-Quellcode

    1. OpenFileDialog.ShowDialog()


    mit

    VB.NET-Quellcode

    1. If OpenFileDialog.ShowDialog = Windows.Forms.DialogResult.OK Then


    4. Nimm Messagebox.Show anstatt MsgBox. Das ist VB.NET konform

    Das mal nur grundlegende Tipps.

    Zum Thema :

    Greifst du evtl. per Hand darauf zu?
    Also ist die Datei geöffnet ?
    Mach das am besten mit einem Stream, den du dann schließt.
    @Linkai:: Probier dies:

    VB.NET-Quellcode

    1. If OpenFileDialog.ShowDialog = Windows.Forms.DialogResult.OK Then
    2. PictureBox1.ImageLocation = OpenFileDialog1.FileName
    3. Enf If
    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!
    Ich danke euch für die Tipps :)

    Ich habe es dennoch anders gelöst. Das ganze ist zwar umständlicher aber es geht nun.
    Das eigene Programm hat auf das Bild zugegriffen weswegen es dies nicht ersetzen konnte.
    Ich habe nun eine Filecopy.exe erstellt, welche den Prozess des Hauptprogramms schließt.
    Dies sorgt dafür, dass das Bild nicht weiter verwendet wird und kopiert dies nun.
    Nach Abschluss wird das Programm wieder gestartet :)

    Ich bedanke mich trotzdem nochmal bei euch :)

    Lg Linkai
    Viele Frauen kamen, viele sind gegangen, eine ist geblieben 12.5.12 <3 ich liebe dich Schatz :love: :love:
    @Linkai:: Lies die Bitmap über einen FileStream ein, dann hängt sie nicht an einem anderen Prozess:

    VB.NET-Quellcode

    1. ' Pseudocode
    2. Dim bmp As Bitmap
    3. Using fs = New FileStream(Datei)
    4. bmp = New Bitmap(fs)
    5. fs.Close()
    6. End Using
    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!