Autor Beitrag
Luka
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 22



BeitragVerfasst: Mo 16.11.09 17:03 
Hi,

Ich habe ein Formular, mit dem ich Produktbilder auf der Festplatte verschieben. Sobald ich ein Bild auswaehle, erscheint es danach in einer Picturebox. Am Schluss klickt man dann auf abspeichern und die Bilder und Produktinformationen werden in die DB geschrieben. Danach moechte ich den Ordner mit den Bildern loeschen. Nun habe ich jedoch das Problem, das mein Formular danach immer noch komplett angezeigt wird, incl. den Bildern, so das der Ordner nicht geloescht werden kann.

Ich muss also erreichen, das das Formular komplett zurueckgesetzt wird, so das man ein neues Produkt eintragen kann. Doch wie bekomme ich das hin? So etwas wie form.reset() gibt es ja nicht oder? Aus dem was ich so im www gefunden habe, werde ich einfach nicht schlau.

Freue mich ueber jede Antwort. Vielen dank im Voraus.

Gruss, Luka
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 16.11.09 17:17 
Tut mir leid, ich werde aus deiner Problembeschreibung nicht schlau. Das sind doch zwei vollständig verschiedene Angelegenheiten:

Dateien auf der Festplatte können z.B. mit File.Delete gelöscht werden. Das hat aber für die Anzeige in einem Formular keinerlei Auswirkungen.

Im Formular muss jedes Control einzeln aufgeräumt werden. Indirekt ist in der SDK-Doku/MSDN/Hilfe zu lesen, dass PictureBox.Image zuerst mit Dispose zu löschen ist, erst danach kann die PictureBox selbst dem GC übergeben werden. Aber das musst du (wie du erkannt hast) selbst mit einer eigenen Routine erledigen.

Gruß Jürgen
Luka Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 22



BeitragVerfasst: Mo 16.11.09 17:30 
Hallo,
vielen Dank fuer Deine Antwort. Das Problem ist auch nicht so einfach zu beschreiben, vielleicht hast Du meinen vorherigen Post gesehen, dort beschreibe ich was ich vorhabe. Ich habe zwar keine Antwort auf den Post erhalten, aber mein Formular genau so umgesetzt. (Nur dynamische PictureBoxes statt dem ListView)

Es gibt also keine Moeglichkeit das Formular komplett auf null zu setzen? Ich habe versucht es einfach zu schliessen, aber selbst da kommt die Meldung das die Datei in Benutzung ist. Muss ich also wirklich alle Steuerelemente handisch auf null setzen?

Luka
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 16.11.09 17:41 
Nein, es ist nicht unbedingt erforderlich, jedes Control freizugeben. Aber unabdingbar ist, dass jedes Bild per Dispose zum "Auflösen" ausdrücklich freigegeben wird. Darauf bezieht sich die Meldung vermutlich - bzw. darauf, dass durch das fehlende Dispose noch das Bild im Formular und die Bilddatei auf der Festplatte miteinander verknüpft sind. Jürgen

PS. Nein, die andere Diskussion kannte ich nicht. Ich war ein paar Tage verreist und nur kurz einmal im WWW unterwegs.
Luka Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 22



BeitragVerfasst: Mo 16.11.09 18:03 
Ok, vielen Dank. Echt schade, ich dachte es gibt wirklich so etwas wie reset Form() und schwupps ist alles leer und Speicher gereinigt, so das man ohne Probleme wieder neue Daten eingeben koennte.
Ich muss mir also das dispose mal anschauen, mal sehen wie das funktioniert.

Wenn Du mal Zeit und Lust hast, waere es schoen wenn Du etwas zu meinem genannten Post sagen koenntest. Ich weiss das der ziemlich lang ist und das es mehr zu Brainstorming gehoert, aber als totaler C# Neuling bin ich mir halt einfach nicht sicher, ob das ueberhaupt der richtige Ansatz ist oder ein "alter Hase" sagen wuerde "Oh mein Gott, was fuer ein Mist".

Nochmal Danke fuer deine Antwort. Gruss, Luka
Luka Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 22



BeitragVerfasst: Di 17.11.09 15:12 
Hallo,

Leider muss ich diesen Post wieder rausholen, da es mir immer noch nicht gelungen ist das Bild freizugeben. Hier mal mein Sourcecode. Ich springe in die Methode saveFileInfo, dort soll dann folgendes geschehen, lese alle Bilder aus dem temporaer erstellten Ordner aus und verschiebe diese in den Hauptordner, wenn alle verschoben, loesche das Verzeichnis.

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
    
int i=0;
foreach (System.IO.FileInfo file in files)
{
  string fileName = file.Name;

  try
  {
    file.CopyTo(sDirName+"/" + fileName);
    pictureBox[i].Image.Dispose();
    pictureBox[i].Dispose();
    i++;
  }
  catch (Exception ex)
  {
    MessageBox.Show("Es ist ein Fehler aufgetreten : " + ex.Message);
  }
}

 Directory.Delete(tmpFolder,true);

Meine Picture Box verschwindet vom Formular, aber das Bild scheint einfach nicht freigegeben zu sein. Wie kann das sein und was muss ich machen? Ich finde einfach keine Loesung und hoffe jemand hat eine Idee. Ach ja, bevor der Button "Save Product" gedrueckt wird ja fuer jedes neu ausgewaehlte Bild eine Picturebox angelegt. Die Zuweisung erfolgt so:
ausblenden C#-Quelltext
1:
pictureBox[i].Image = System.Drawing.Image.FromFile(file.FullName);					

Ich weiss nicht ob diese Zusatzinfo hilfreich ist. Freue mich ueber jedes Feedback, da ich wirklich nicht mehr weiss, wie die Loesung aussehen koennte. Vielen Dank im Voraus.