Verwendetes Bild löschen

  • VB.NET

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

    Verwendetes Bild löschen

    Hallo,
    ich habe ein kleines Problem.
    Ich habe in das Form_Load Event einer PictureBox eine Datei von D:\... zugewiesen. Bei einem Buttonklick soll diese Datei auf D:\ gelöscht werden und die PictureBox soll leer werden, bzw. ein anderes Bild zugewiesen werden.
    Wenn ich die Datei aber mit IO.File.Delete(D:\bild.jpg) löschen will, bekomme ich logischer Weise die Meldung, dass die Datei noch verwendet wird und daher nicht gelöscht werden kann.
    Kann mir da jemand weiterhelfen?
    Versuche es mit :

    VB.NET-Quellcode

    1. PictureBox.Image = Nothing


    Edit:
    Huch ich sehe gerade, dies geht auch nicht :)
    Als DirtyLösung auf die Schnelle.. Lade einfach ein anderes "Dummybild" vor dem Löschen in deine PictureBox (z.b. aus Ressources, damit du keine Externe Datei brauchst)


    Und Noch ein Edit: (das lies mir keine Ruhe)
    Das Problem beginnt bei dir sicher schon beim laden in die Picturebox: Versuche folgendes.. bis es bessere Antworten gibt:

    VB.NET-Quellcode

    1. ' Zum Laden des Bildes
    2. Using bp As New Bitmap("C:\pic\bild.png")
    3. PictureBox1.Image = bp.Clone
    4. End Using
    5. ' zum Löschen
    6. PictureBox1.Image.Dispose()
    7. IO.File.Delete("C:\pic\bild.png")


    4. und letztes Edit:
    sehe gerade, du arbeitest mit VB6 (ich weiß hätte ich vorher schauen sollen), sorry... keine Ahnung ob es da schon die Dinge gibt, die ich beschrieb
    (ist schon soooo lange her, erinnere mich nicht mehr daran)

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „RoulettePilot“ ()

    Nanü?
    ich habe es doch getestet (sonst wären nicht die vielen Edits zustande gekommen) :P

    Das Bild ist irgendwo noch in "Benutzung"
    Entweder beim Laden (deswegen der Umweg über die Bitmap), welches dann wieder freigegeben wird.
    oder irgendwo anders in deinem Programm. (Rufst du es evtl. ein zweites mal auf, bzw. Lädst es an anderer Stelle irgendwo?)

    Denn zumindest wenn du das "Dummybild" in die Picturebox lädst, liegt es nicht mehr an der Box, sondern an anderer Stelle in deinem
    Programm das es nicht löschbar ist.
    Nutze die .ImageLocation-Property der PictureBox.

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private _imagePath As String = IO.Path.Combine(Application.StartupPath, "1.jpg")
    3. Public Sub New()
    4. InitializeComponent()
    5. PictureBox1.ImageLocation = _imagePath
    6. End Sub
    7. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    8. IO.File.Delete(_imagePath)
    9. End Sub
    10. End Class
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    Ah, schön, das funktioniert auch super :)

    Ich habe noch eine andere Frage: Ich lasse eine Bilddatei per OpenfileDialog auswählen. Das ausgewählte Bild soll aber eine bestimmte Maße haben. (z.B. 400x400). Kann man dies irgendwie einstellen? Bei einem zu großen Bild soll es eine Fehlermeldung geben. Oder noch besser wäre, wenn man bei rechteckigen Bilder die Meldung bekommt. Quadratische skaliert eine PixtureBox ja entsprechend runter. Bei Rechteckigen ist das dann ja etwas problematisch.

    GameGamer schrieb:

    Bei einem zu großen Bild soll es eine Fehlermeldung geben.
    Dann musst Du Dir nach dem Auswahldislog die entsprechenden Properties aus dem Bild holen, abtesten und das Bild ggf. ablehnen:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    2. Using dlg = New OpenFileDialog
    3. dlg.Filter = "JPeg|*.jpg|Alle Dateien|*.*"
    4. If dlg.ShowDialog <> Windows.Forms.DialogResult.OK Then
    5. Return
    6. End If
    7. Dim bmp = New Bitmap(dlg.FileName)
    8. If bmp.Width <> bmp.Height Then
    9. MessageBox.Show("Bild ist nicht quadratisch")
    10. Return
    11. End If
    12. PictureBox1.ImageLocation = dlg.FileName
    13. End Using
    14. End Sub
    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!