Hallo,
ich arbeite zur Zeit an einem Programm welches mir Bilder in einem Listview darstellt und diese bei auswahl in einen bestimmten Ordner verschiebt. Die Bilder werden per OpenFileDialog eingelesen und anschließend mit Hashcode in die Datenbank geschrieben(SqlLite) anschließend werden Vorschauen für die Bilder erstellt (im Listview). Die Bilder werden beim starten des Programm in eine Image List geschrieben die aus den Vorhanden Daten der Datenbank erstellt wird.
Leider bestehen nun 2 Probleme bei denen ich mir entweder nicht so sicher bin oder mir nicht klar ist ob das überhaupt richtig wie ich genau vorgehe.
Problem 1:
Erstellen von Thumbnails:
int maxLengt = GlobalVar.DB.edScanDS.Tables["DateiDokLeer"].Rows.Count;
ImageList iconListKopie = new ImageList();
iconListKopie.ImageSize = new Size(GlobalVar.iconBreite, GlobalVar.iconBreite);
iconListKopie.Images.Clear();
IntPtr hImgSmall;
string FName;
SHFILEINFO shinfo = new SHFILEINFO();
int i = 0;
while (i != maxLengt)
{
//Icon Size festlegen
currentPath = new DirectoryInfo(Directory.GetCurrentDirectory() + "\\Arbeitskorb" + "\\" + GlobalVar.ArbeitskorbName + "\\").ToString();
FileInfo file = new FileInfo(currentPath + GlobalVar.DB.edScanDS.Tables["DateiDokLeer"].Rows[i]["Dat_NeuName"].ToString());
string fileName = currentPath + GlobalVar.DB.edScanDS.Tables["DateiDokLeer"].Rows[i]["Dat_NeuName"].ToString();
FName = GlobalVar.DB.edScanDS.Tables["DateiDokLeer"].Rows[i]["Dat_Name"].ToString();
if (file.Extension == ".jpg" || file.Extension == ".png" || file.Extension == ".TIF")
{
Image jpgThumb;
Image image;
image = Image.FromFile(fileName);
jpgThumb = image.GetThumbnailImage(GlobalVar.iconBreite, GlobalVar.iconHoehe, null, new IntPtr());
image.Dispose();
iconListKopie.Images.Add(jpgThumb);
iconListKopie.Images.SetKeyName(i, GlobalVar.DB.edScanDS.Tables["DateiDokLeer"].Rows[i]["Dat_ID"].ToString());
}
else
{
hImgSmall = Icons.SHGetFileInfo(FName, 0, ref shinfo, (uint)Marshal.SizeOf(shinfo), Icons.SHGFI_ICON | Icons.SHGFI_LARGEICON);
System.Drawing.Icon myIcon = System.Drawing.Icon.FromHandle(shinfo.hIcon);
iconListKopie.ImageSize = new Size(GlobalVar.iconBreite, GlobalVar.iconHoehe);
iconListKopie.Images.Add(myIcon);
iconListKopie.Images.SetKeyName(i, GlobalVar.DB.edScanDS.Tables["DateiDokLeer"].Rows[i]["Dat_ID"].ToString());
}
i++;
};
GlobalVar.IconList = iconListKopie;
iconListKopie.Dispose();
}
Hier erstelle ich alle Bilder die erkannt werden ist es kein Bild lasse ich das Icon aus der Shell32 suchen und einfügen. Die dauert ab 100 Bildern sehr lang.. aber leider weiss ich keine andere möglichkeit.
Das eigentlich Problem das hier entsteht entsteht beim Lösch vorgang. Entferne ich ein Bild aus der Liste und der Datenbank so muss die GESAMTE List und das Listview neu befüllen.
Leider versteh ich die Bindung von Listview und Imagelist nicht so ganz. Wie hängen diese zwei zusammen ? Entfernt er das Bild aus der Imagelist mit wenn ich das Item Remove?
Problem 2
WEnn ich Images Image Hinzufüge passiert das gleich ich muss immer das Gesamte Datenset neu laden und die Imageliste und die Icons neu erstellen das dauert wie schon erwähnt sehr lange.
Gibt es hier eine Methode das Datenset nur Änderung lesen zulassen und nur einzelne Bilder hinzfügen zulassen ohne alles neu erstellen zu müssen ?
Danke für eure Hilfe!
lg
telly