Entwickler-Ecke
IO, XML und Registry - Ereignis on Click listbox
nas4killer - So 03.02.08 19:48
Titel: Ereignis on Click listbox
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:
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:
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
Christian S.: C#-Tags hinzugefügt
Kha - Mo 04.02.08 00:11
Titel: Re: Erignis on Click listbox
nas4killer 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 - 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 - 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 - 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 - Mo 04.02.08 14:56
Jü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:
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 - 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:
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:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| pictureBox1.Image = System.Drawing.Image.FromFile(@"D:\Seriendatenbank\" + listBox1.Text + @"\Image.jpg"); label2.Text = listBox1.Text;
listBox2.Items.Clear(); string var = ""; StreamReader sr = new StreamReader(@"D:\Seriendatenbank\" + listBox1.Text + @"\Staffel.txt");
while ((var = sr.ReadLine()) != null) { listBox2.Items.Add(var); } |
danke
mfg
Killer
Moderiert von
Christian S.: C#-Tags hinzugefügt
Kha - 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 ;) .
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!