Autor Beitrag
nas4killer
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 42



BeitragVerfasst: So 03.02.08 19:48 
hi,

nach ca 2 stunden habe ich den Fehler für rine ursache gefunden aber leider keien lösung.

Folgendes:
Ich habe eine Listbox In dieser stehen Wörter. Und ich habe eine picturebox.

Nun wollte ich realiesieren das wenn ich die Listbox ein bestimtes wort anklicke das dazugehörige Bild erscheint. Das funktioniert. Mach ich druch:

ausblenden C#-Quelltext
1:
pictureBox1.Image = System.Drawing.Image.FromFile(@"D:\" + listBox1.Text + @"\Image.jpg");					


so nun wollt ich aber auch diese datei vom bild löschen, GEdacht war es so:

ausblenden C#-Quelltext
1:
System.IO.File.Delete(@"D:\" + listBox1.Text + @"\Image.jpg");					



Leider kommt da die ganze Zeit eine fehlermeldung.

Habe dann rausgeunfden das die befehle zwar funktionieren. da wenn ich es nicht über Lsitbox mache sondern direkt lösche dann gehts.

Aber wenn ich das durhc die lsite machen will gehts nicht. Meine Vermutung ist jetzt das er beim erignis OnClick in der Listbox dauerhaft versucht das Bild zu laden. Und ich dadurch dann natürlich nicht löschen kann.

Moderiert von user profile iconChristian S.: C#-Tags hinzugefügt
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Mo 04.02.08 00:11 
Titel: Re: Erignis on Click listbox
user profile iconnas4killer hat folgendes geschrieben:
Leider kommt da die ganze Zeit eine fehlermeldung.
Gepriesen seist du für diese Aussagekraft :flehan: . Aber eigentlich dürfte da sich nichts beißen, FromFile sollte die Datei wieder schließen. Wo steht überhaupt die zweite Zeile?
nas4killer Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 42



BeitragVerfasst: Mo 04.02.08 12:39 
Also ok beschreibe hier auch die Fehlermeldung mal ;-)

"Der Prozess kann nicht auf die Datei D:\Seriendatenbank\444\Image.jpg zugreifen, da sie von einem anderen Prozess verwendet wird."

und die 2te Zeile ist auf einem eifnachem zusätzllichen Button;

Danke
Killer
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Mo 04.02.08 12:45 
Ist es denn so schwer, selbst in die SDK-Doku zu schauen:
Zitat:
Image.FromFile-Methode
Hinweise
Die Datei bleibt gesperrt, bis Image freigegeben wird.

Also musst Du zuerst das Bild freigeben, z.B. indem Du ein anderes Bild aus der Liste auswählst; dann kannst Du die Datei löschen. Jürgen
nas4killer Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 42



BeitragVerfasst: Mo 04.02.08 13:08 
Sorry, es ist aber für mich leider wirklich nicht so einfach.

Dein vorschlag hatte ich shcon getestet in dieser art hast du aber nur teilweise recht.

Wenn ich da erst ein anderes Bild einfüge dann und dannach direkt lösche funktiniert es nicht. WEnn ich aber ein adners bild einfüge und mit einem weiteren Button erst lösche dann funktioniert es. So als ob er zeti dazwischen rbauchen würde bis er das neue bild laden kann. :-/

danke
mfg
NAS4Killer
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Mo 04.02.08 14:56 
user profile iconJüTho hat folgendes geschrieben:
Also musst Du zuerst das Bild freigeben, [...]
Um es danach trotzdem noch weiterverwenden zu können, musst du es also von der Festplatte in den Ram holen. Sollte so irgendwie funktionieren:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
using (var image = Image.FromFile(...)) {
  if (pictureBox.Image != null)
    pictureBox.Image.Dispose();
  pictureBox.Image = new Bitmap(image);
}
nas4killer Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 42



BeitragVerfasst: Mo 04.02.08 21:48 
Ich befürchte ich habe da was Falsch verstanden.

Also hier mal was ich gemacht habe:

Mein Button zum Löschen von dem Bild:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
            using (var image = Image.FromFile(@"D:\Seriendatenbank\nopic.jpg")) 
            {
                if (pictureBox1.Image != null)
                    pictureBox1.Image.Dispose();
                pictureBox1.Image = new Bitmap(image);
            }

            System.IO.File.Delete(@"D:\Seriendatenbank\444\Image.jpg");
        }


OnClick Erignis von der ListBox1:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
           //Seriencover laden
            pictureBox1.Image = System.Drawing.Image.FromFile(@"D:\Seriendatenbank\" + listBox1.Text + @"\Image.jpg");
 
            //Seriename groß ausgeben
            label2.Text = listBox1.Text;

             //Listbox2 Einlesen
            listBox2.Items.Clear();
            string var = "";//Leere Stringvariable erstellen

            StreamReader sr = new StreamReader(@"D:\Seriendatenbank\" + listBox1.Text + @"\Staffel.txt");           

            while ((var = sr.ReadLine()) != null//Schleife für auslesen erstellen
            {
                listBox2.Items.Add(var); //Hinzufügen in an sdie Selle der Leeren Variable
            }



danke
mfg
Killer

Moderiert von user profile iconChristian S.: C#-Tags hinzugefügt
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Mo 04.02.08 23:47 
Mir ist gerade eingefallen, dass es etwas einfacher geht: Ersetze (in deinem ursprünglichen Code) einfach jedes Image.FromFile durch new Bitmap, dann wird die Datei sofort wieder geschlossen.
Ob du dann vor jeder Zuweisung von PictureBox.Image wie in meinem Code noch das alte Image dispost, bleibt dir überlassen, ohne es wird jedenfalls nichts allzu Schlimmes passieren ;) .