vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Schützen Sie Ihre Software vor Software-Piraterie - mit sevLock 1.0 DLL!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Fortgeschrittene
Bitmapdatei löschen, welche zuvor in einer PictureBox war 
Autor: DerLord
Datum: 22.03.07 03:22

Hi @all,

ihr merkt an der aktuellen Uhrzeit, dass ich net aufgege, aber solangsam gehen mir die Ideen aus.
Ich versuche schon seit Stunden dem Problem auf die Schliche zu kommen, aber vergebens.

Es geht darum Bilder aus einer selbsterstellten Vorschau zu löschen, d.h. die Bilddatei selbst von der Platte zu putzen. Bei jedem Versuch kommt die Fehlermeldung, dass ein andere Prozess noch darauf zu greift. Andere Quellen als mein Prog kann ich dafür 100%ig ausschließen.
Also muss irgendwas in meinem Prog das Image im Speicher halten, nur was....?!?

Hier mal meine beiden relevanten subs :


Diese fügt Bilder der Vorschau hinzu und speichert ggf den Eintrag und kopiert das Bild in einen best. Ordner, ist aber optional.


 Private Sub addImage(ByVal File As String, Optional ByVal checked As Boolean = _
   True, Optional ByVal saveMode As Boolean = True)
        Try
 
            Dim MyActPos() As Integer = Nothing
            Dim ID As Integer = 0
            MyActPos = getActPos()
            ID = MyActPos(0) + 1
 
            Dim MyPnl As New Panel
            Dim MyPicBox As New Infragistics.Win.UltraWinEditors.UltraPictureBox
            Dim MyChkBox As New CheckBox
 
            If saveMode Then
                'Bild dem Pool-Ordner hinzufügen
                clsImage.add(ID, File)
                'Eintrag dem Pool hinzufügen
                clsUserData.Pool.add(ID, File, checked)
            Else
                'Datei ist bereits vorhanden, ID wird um 1 zurückgesetzt
                ID -= 1
            End If
 
            File = clsUserData.PoolPath & ID & ".bmp"
 
            'Panel generieren und hinzufügen
            With MyPnl
                .Name = "pn" & ID
                .Size = New Size(150, 140)
                .Location = New Point(10 + MyActPos(2) * 155, 10 + MyActPos(1) _
                  * 145)
            End With
 
            With MyPicBox
                .Name = "pb" & ID
                .Image = System.Drawing.Image.FromFile(File)
                .BorderStyle = Infragistics.Win.UIElementBorderStyle.None
                .DrawBorderShadow = True
                .ScaleImage = Infragistics.Win.ScaleImage.Always
                .Cursor = Cursors.Hand
                .Appearance.BorderColor = Color.DarkBlue
                .Size = New Size(130, 100)
                .Location = New Point(10, 10)
                .Refresh()
            End With
            AddHandler MyPicBox.Click, AddressOf MyPictureBox_Click
            MyPnl.Controls.Add(MyPicBox)
 
            With MyChkBox
                .Name = "cb" & ID
                .Size = New Size(130, 20)
                .Location = New Point(10, 110)
                .Text = "Zum Pool hinzugefügt"
                .Checked = checked
                .Refresh()
            End With
            MyPnl.Controls.Add(MyChkBox)
 
            pnlOverview.Controls.Add(MyPnl)
 
        Catch ex As Exception
            MsgBox("Es ist ein Fehler beim Einlesen des Bildes aufgetreten." & _
              vbCrLf & vbCrLf & ex.Message, MsgBoxStyle.Exclamation)
        End Try
 
    End Sub
Diese entfernt den Eintrag und sollte das Bild aus dem Ordner wieder entfernen

 Private Sub removeImage(ByVal ID As Integer)
 
        Dim MyPanel As Panel
 
        For Each ctrl As Control In pnlOverview.Controls
            If TypeOf (ctrl) Is Panel Then
                MyPanel = CType(ctrl, Panel)
                If MyPanel.Name.Substring(2) = ID Then
                    pnlOverview.Controls.Remove(MyPanel)
 
                    'Eintrag aus dem Pool entfernen
                    clsUserData.Pool.remove(ID)
                    'Bild aus dem Pool-Ordner entfernen
                    clsImage.remove(ID)
                    Exit For
                End If
            End If
        Next
Hier noch die Funktion zum Löschen der Bilddatei
    Friend Shared Sub remove(ByVal ID As Integer)
 
        Dim MyFile As String = clsUserData.PoolPath & ID & ".bmp"
        If IO.File.Exists(MyFile) = True Then
            Try
                IO.File.Delete(MyFile)
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try
        End If
 
    End Sub
Kann eigentlich nur etwas ganz banales, aber heute wird das nix mehr, komme einfach net dahinter, habe Image auf nothing gesetzt, die PictureBox disposed, entfernt, die ControlCollectioen des übergeordneten Panels gelöscht und freigegeben etc...

Wäre sehr sehr geil, wenn Jemand zufälligerweise noch einen Ansatz hätte

So denn ma gn8


MfG
Huppi

######################################################
# Dank Computer wissen wir viel genauer, was wir nicht wissen... #
######################################################

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Bitmapdatei löschen, welche zuvor in einer PictureBox war 
Autor: Drapondur
Datum: 22.03.07 05:30

Hi,

lade das Image nicht mit Image.FromFile, sondern mit Image.FromStream aus einem selbstgeöffneten FileStream. Sobald das Bild geladen ist, schließt Du den Stream. Dann sollte das Problem nicht mehr kommen.

Ciao
D.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Bitmapdatei löschen, welche zuvor in einer PictureBox war 
Autor: DerLord
Datum: 22.03.07 10:19

ganz ganz fettes THX, das wars


MfG
Huppi

######################################################
# Dank Computer wissen wir viel genauer, was wir nicht wissen... #
######################################################

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel