j'affiche dans une listwiew des imagettes, quand il y en a 300 le temps
d'affichage est très long.
je voudrai au départ n'afficher que les images visibles, si ma listview
affiche 20 imagetttes, je désire afficher
les 20 premieres imagettes. Et afficher le reste que quand je déplace
l'ascenceur de la listview.
Existe t'il une méthode préconisée ? une astuce ?
comment savoir si une imagette est visible ou pas dans la listview ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Gilles TOURREAU
Bonjour Vincent,
Utilises l'evenement Invalidate de ton ListView, qui est appellé à chaque fois que ton ListView doit être redessiné. Tu peux utiliser ensuite la méthode : GetItemRect(int i) qui permet de récuperer une zone Rectangle où est placé ta i-ème image. Tu devra cette zone et tester s'il y a intersection avec la zone Rectangle qui est envoyé à l'evenement Invalidate de ta ListView, si c'est le cas, l'image i doit être dessiné...
Je te donne un exemple de code que j'ai tapé directement et que je n'ai pas testé :
ListView l = new ListView(); string[] images = new string[300];
//Chargement du tableau des images images[0] = "1.jpg"; images[1] = "2.jpg";
//Brancher l'evenement Invalidated l.Invalidated += new InvalidateEventHandler(redessine);
private redessine(object sender, InvalidateEventArgs e) { int i;
//On parcourt tous les objets de ta liste for(i = 0; i < 300; i++) { Rectangle r; r = GetItemRect(i);
//On regarde si il y a intersection entre la zone ou l'image doit // être dessinée et la zone invalide. if (r.IntersectWith(e.InvalidRect)) DessinerFichierImage(images[i]); } }
Tu peux soit charger les images à chaque fois qu'elle doivent être déssinée, soit les charger la première fois qu'il est nécessaire et les stocker dans un tableau...
Cordialement
Gilles TOURREAU
Bonjour Vincent,
Utilises l'evenement Invalidate de ton ListView, qui est appellé à
chaque fois que ton ListView doit être redessiné.
Tu peux utiliser ensuite la méthode : GetItemRect(int i) qui permet de
récuperer une zone Rectangle où est placé ta i-ème image.
Tu devra cette zone et tester s'il y a intersection avec la zone
Rectangle qui est envoyé à l'evenement Invalidate de ta ListView, si
c'est le cas, l'image i doit être dessiné...
Je te donne un exemple de code que j'ai tapé directement et que je
n'ai pas testé :
ListView l = new ListView();
string[] images = new string[300];
//Chargement du tableau des images
images[0] = "1.jpg";
images[1] = "2.jpg";
//Brancher l'evenement Invalidated
l.Invalidated += new InvalidateEventHandler(redessine);
private redessine(object sender, InvalidateEventArgs e)
{
int i;
//On parcourt tous les objets de ta liste
for(i = 0; i < 300; i++)
{
Rectangle r;
r = GetItemRect(i);
//On regarde si il y a intersection entre la zone ou l'image doit
// être dessinée et la zone invalide.
if (r.IntersectWith(e.InvalidRect))
DessinerFichierImage(images[i]);
}
}
Tu peux soit charger les images à chaque fois qu'elle doivent être
déssinée, soit les charger la première fois qu'il est nécessaire et
les stocker dans un tableau...
Utilises l'evenement Invalidate de ton ListView, qui est appellé à chaque fois que ton ListView doit être redessiné. Tu peux utiliser ensuite la méthode : GetItemRect(int i) qui permet de récuperer une zone Rectangle où est placé ta i-ème image. Tu devra cette zone et tester s'il y a intersection avec la zone Rectangle qui est envoyé à l'evenement Invalidate de ta ListView, si c'est le cas, l'image i doit être dessiné...
Je te donne un exemple de code que j'ai tapé directement et que je n'ai pas testé :
ListView l = new ListView(); string[] images = new string[300];
//Chargement du tableau des images images[0] = "1.jpg"; images[1] = "2.jpg";
//Brancher l'evenement Invalidated l.Invalidated += new InvalidateEventHandler(redessine);
private redessine(object sender, InvalidateEventArgs e) { int i;
//On parcourt tous les objets de ta liste for(i = 0; i < 300; i++) { Rectangle r; r = GetItemRect(i);
//On regarde si il y a intersection entre la zone ou l'image doit // être dessinée et la zone invalide. if (r.IntersectWith(e.InvalidRect)) DessinerFichierImage(images[i]); } }
Tu peux soit charger les images à chaque fois qu'elle doivent être déssinée, soit les charger la première fois qu'il est nécessaire et les stocker dans un tableau...