Monico9385
Messages postés279Date d'inscriptionlundi 29 mars 2004StatutMembreDernière intervention 6 août 2007
-
1 avril 2006 à 16:14
cs_Bidou
Messages postés5487Date d'inscriptiondimanche 4 août 2002StatutMembreDernière intervention20 juin 2013
-
6 avril 2006 à 08:21
Bonjour tout le monde,
je viens poster parce que j'ai beau voir toutes les sources possibles
sur différents sites, et notamment celui la, j'arrive pas à comprendre
et à faire un affichage de miniature dans un listview. Ce que je
voudrai, c'est à partir d'un explorateur, afficher en fonction du
répertoire sélectionné dans celui ci, afficher toutes les images de ce
répertoire sous forme de miniature, mais j'y arrive pas.
Est ce que je dois passer par un controle ImageList en plus du ListView ou non?
Et surtout quel code je dois appliquer par rapport à mon chemin, parce
que tout ce que j'essaye en fonction de ce que je récupère ne marche
pas, et je commence à désespérer la ...
Si quelqu'un pouvait m'aider, ce serait génial !!!
cs_Bidou
Messages postés5487Date d'inscriptiondimanche 4 août 2002StatutMembreDernière intervention20 juin 201361 1 avril 2006 à 16:56
Salut,
Oui, il faut construire une ImageList, l'associé au ListView (avec la property SmallImageList / View) puis spécifié l'index de l'image à ajouter lors de l'ajout de l'item à la collection, petit exemple :
ListViewItem itemTitle = new ListViewItem(myString, 0); // 0 c'est l'index de l'image dans l'ImageList
myListView.Items.Add(itemTitle); // Ajout au listView
Monico9385
Messages postés279Date d'inscriptionlundi 29 mars 2004StatutMembreDernière intervention 6 août 2007 1 avril 2006 à 18:09
salut,
merci de ton aide. Je suis plus tres loin maintenant car en fait ca
liste bien, mais ca n'affiche pas sous formes de miniatures mais juste
le chemin du fichier.
voila mon code, qu'est ce que je pourrai rajouter pour afficher les miniatures :)
cs_Bidou
Messages postés5487Date d'inscriptiondimanche 4 août 2002StatutMembreDernière intervention20 juin 201361 1 avril 2006 à 18:25
Tu dois ajouter les images dans l'ImageList!
Actuellement, ton object imageListSmall est vide. Si mes souvenirs sont bons, c'est quelques chose comme ca:
imageListSmall.Images.Add(...); // Ajoute-en combien tu veux
Puis assigner ton object ImageList à la propriété SmallImageList du ListView une fois qu'il est remplit.
cs_Bidou
Messages postés5487Date d'inscriptiondimanche 4 août 2002StatutMembreDernière intervention20 juin 201361 1 avril 2006 à 19:36
Pourquoi tu fais ça dans une boucle?
1) Créer un listView.
2) Créer une ImageList et remplit la
3) Créer tes listViewItem en fonction de ton ImageList (en insérant l'index de l'image à insérer)
4) Ajoute le ListViewItem à la collection des ListViewItem du ListView
En gros :
ListView lv = new ListView (généré par le designer... )
ImageList il = new ImageList (éventuellement généré par le designer)
foreach(string s in photos) il.Images.Add(Bitmap.FromFile(s)); // Remplit l'ImageList avec tes images
Maintenant le for pour remplir les éléments
for(...i....)
{
ListViewItem itemTitle = new ListViewItem("text", i)
listViewPhoto.Items.Add(itemTitle);
}
Monico9385
Messages postés279Date d'inscriptionlundi 29 mars 2004StatutMembreDernière intervention 6 août 2007 1 avril 2006 à 20:31
Je comprend pas la, j'ai repris ce que tu m'as donné, mais ca marche
pas. J'ai pas d'erreur au niveau de la compilation, mais quand
j'execute, ca me met une erreuur sur ce qu'il y a dans le foreach : une
erreur de mémoire :(
il.Images.Add(Bitmap.FromFile(s)); // Remplit
l'ImageList avec tes images
}
for (i = 0; i < photos.Length; i++)
{
ListViewItem itemTitle = new
ListViewItem("text", i);
listViewPhoto.Items.Add(itemTitle);
}
listViewPhoto.SmallImageList = il;
listViewPhoto.View = View.SmallIcon;
}
Sinon je faisais un if sur les extensions, car j'avais recupérer un
code qui faisait comme ca, mais si y a pas besoin, je le met pas :)
Désolé de te demander tout ca, mais je suis débutant, et j'ai un peu de
mal à comprendre tout. Mais je suis sur que la solution n'est pas tres
loin... Je cherche en meme temps :)
cs_Bidou
Messages postés5487Date d'inscriptiondimanche 4 août 2002StatutMembreDernière intervention20 juin 201361 1 avril 2006 à 21:46
Un conseil, pour l'instant oublie ton TreeView et concentre-toi seulement sur le ListView (oublie donc ton event AfterSelect).
Créer une nouvelle form dans ton projet.
Ajoute avec le designer un ListView (mets la propriété View à SmallImageList) et appelle le listViewPhoto.
Maintenant, avec le designer encore, ajoute une ImageList, et avec le designer toujours, ajoute des images dedans (pour l'instant, tu dois avoir écris aucun code) [Tu appelles l'imageList imgList].
Maintenant, avec le designer encore, tu mets la proprieté SmallImageList de ton ListView à la valeur de ton ImageList (il détecte automatiquement que tu as construit une ImageList). J'espère que tu me suis.
Ok, maintenant, dans le Load de ta form, tu écris ceci :
Monico9385
Messages postés279Date d'inscriptionlundi 29 mars 2004StatutMembreDernière intervention 6 août 2007 2 avril 2006 à 12:22
Oui j'ai bien compris !!! j'ai donc fait tout ce que tu m'as dit, ca
marche parfaitement, sauf que dans le code généré y a rien qui reprend
l'insertion des images dans l'imageList. j'ai juste ca :
cs_Bidou
Messages postés5487Date d'inscriptiondimanche 4 août 2002StatutMembreDernière intervention20 juin 201361 2 avril 2006 à 12:35
Oui oui c'est normal ;-)
Quand tu fais cela avec le designer, les images sont insérées statiquement en tant que resources, et la ligne que tu as postées ci-dessus va justement rechercher ces images dans les resources !
Si tu dois les insérer dynamiquement, tu dois faire comme je t'ai expliqué au début :
// pathCol est ton tableau qui contient les chemins vers les images
// C'est un tableau de string (string[])
foreach
(
string str
in
pathCol)
{
imgList.Images.Add(Image
.FromFile(str));
}
String[]
pathCol = "C:\\Documents and
Settings\\Nicolas\\Bureau\\MonDossier";
foreach(string str in pathCol)
{
imgList.Images.Add(Image.FromFile(str));
}
for(int i=0; i<imgList.Images.Count; i++)
{
ListViewItem itemTitle = new ListViewItem("Mon
texte", i);
listViewPhoto.Items.Add(itemTitle);
}
listViewPhoto.SmallImageList = imgList;
}
mais il met une erreur comme quoi je peux pas convertir un string en
string[]. et quand je le met avec mon treeview, j'ai toujrous mon
erreur d'OutOfMemory sur imgList.Images.Add(Image.FromFile(str));
// Etre sur que dans ton répertoire tu as que des images !
// Sinon faut faire un filtre
foreach(
string str
in pathCol) imgList.Images.Add(
Image.FromFile(str));
Monico9385
Messages postés279Date d'inscriptionlundi 29 mars 2004StatutMembreDernière intervention 6 août 2007 4 avril 2006 à 14:00
En fait, j'ai compris d'ou venait l'erreur de Mémoire. C'est parce
qu'il y avait d'autres fichiers que des images dans le répertoire !!!
Par contre j'arrive pas à appliquer un filtre, je vois pas où
l'appliquer et comment surtout ! Un ptit peu d'aide encore :D