mind Avez-vous défilement vertical?
Je commencerais par le contrôle DataGridView comme base et créer la mise en œuvre suivante:
1) Créer colonne personnalisée et provenant de DataGridViewImageColumn type de cellule. Vous pouvez les appeler "CronosNetImageColumn", "CronosNetImageCell".
2) Créer une classe "CronosImageDetails" pour contenir les données de la cellule (inclure les propriétés du texte d'affichage et de l'URL de l'image). Cela sera transmis en tant que valeur pour chaque cellule. Ex:
ImageGrid.Rows.Add (nouveau CronosImageDetails {DisplayText = "Jour à la plage", ImageURL = "http: //...beach.jpg"});
3) Remplacer la cellule Paint() pour utiliser un WebClient pour obtenir l'image et utiliser e.Graphics.DrawImage (ImageObtainedFromWebClient) pour peindre l'image dans la cellule. Vous pouvez utiliser e.Graphics.DrawString ((CronosImageDetails) value.DisplayText, ...) pour superposer le texte dans la cellule.
Cette solution rapide vous permet d'obtenir une image défilante qui ne charge les images que lorsque l'utilisateur parcourt la liste et fournit une base solide pour l'amélioration.
autres optimisations recommandées:
a) créer une image bitmap et graphiques backbuffer pour l'élaboration des données de cellule.
B) Peinture d'installation() pour peindre simplement le backbuffer au lieu de faire le travail pour obtenir l'image
C) Créer une nouvelle méthode cellulaire LoadImage() qui engendre un nouveau thread qui télécharge l'image et il peint sur le tampon arrière. D) Avoir Paint() (ou un fil auxiliaire séparé) suivre la direction et l'accélération du défilement et estimer quelles cellules doivent être préchargées. Déclenchez LoadImage() sur ces cellules.
E) Initialiser le tampon arrière de chaque cellule avec une image de chargement. F) Suivre et utiliser des données empiriques à partir des temps de chargement des images pour aider à déterminer quelles cellules doivent être préchargées.
Merci, laissez-moi essayer la méthode loadAsync(), je fais exactement la façon dont vous avez mentionné – Azlam
hey cette approche nécessite-t-elle le contrôle de base à placer dans une application comme MDI? Cela empêchera-t-il l'application de geler? – Azlam