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... #
###################################################### |