2017-10-04 3 views
0

TLDR:ImageList vs ressources: Comment organiser les images dans Winforms?

Quel est le meilleur modèle pour organiser des images dans un projet? Est-il fréquent et conseillé de créer un ImageList au démarrage et accéder à chaque image via son index ou sont resoruces le chemin à parcourir? Dans tous les cas, veuillez expliquer pourquoi.

Problème détaillée:

Je travaille actuellement sur un logiciel qui a été en développement depuis un certain temps maintenant. Il a été partiellement écrit en Visual Basic et dépend fortement de la classe ImageList pour organiser toutes les images dans chaque partie du logiciel. Au début de l'application, un ImageList est créé via un grand tableau contenant tous les noms de tous les fichiers image qui seront toujours accessibles. Chaque fois que vous avez besoin d'une image, vous devez accéder à cet objet et obtenir votre image via l'index de l'image dans la liste. Je comprends que cela a pu être partiellement utile dans le passé, car les ressources dans Visual Studio n'étaient pas aussi pratiques à utiliser et certains contrôles ne fonctionnaient qu'avec ces listes, par exemple la classe ToolBar (remplacée par la ToolStrip) qui a une propriété ImageList et chaque bouton obtient juste l'index de son image dans le ImageList. Je me sens comme ce massif ImageList devrait être abandonné et il devrait y avoir une lente migration vers l'organisation de ces images dans les ressources, mais je ne suis pas principalement un développeur. NET et ne sais pas grand-chose sur Winforms et ses meilleures pratiques .

Comme demandé dans le TLDR: Quel est le meilleur modèle pour organiser des images dans un projet? Est-il fréquent et conseillé de créer un ImageList au démarrage et accéder à chaque image via son index ou sont resoruces le chemin à parcourir? Dans tous les cas, veuillez expliquer pourquoi.

+0

des questions d'opinion sont hors-sujet. Winforms, bien que toujours supporté, n'est plus en développement. C'est ce que c'est. – LarsTech

+1

ImageList ne doit être utilisé que pour fournir des images pour ListView et TreeView, son comportement de copie profonde le rend trop inefficace pour gérer de grandes collections d'images. Vous devriez utiliser une 'Liste '. N'oubliez pas de Dispose() quand ils ne sont plus nécessaires. –

Répondre

0

Si c'est un projet WPF

J'ai deux idées à l'esprit

1) Ajouter un StackPanel dans le XAML de votre fenêtre et votre code XAML

par exemple

StackPanel ImagesStackPanel = new StackPanel(); 

foreach(Image img in Images) //your images enumerable 
{ 

//here you can add also other elements 
Image _img = (Image)XamlReader.Parse(@"<Image Name="{{here goes the image id}}" Height="400" Width="400" /> "); 

    ImagesStackPanel.Children.Add(_img); 
} 


_Window.Content = ImagesStackPanel; 

2) Si vous n'êtes pas inquiet de l'utilisation de cpu/ram et que vous vous souciez beaucoup de style etc vous pouvez faire ce qui suit

L'autre idée est d'utiliser le navigateur web ou le navigateur cefsharp. Créez un fichier html avec du code html pour la galerie multimédia, définissez vos fichiers en tant que ressources et appelez simplement leurs URL de ressources à partir du code html.

Vous pouvez charger votre code html dans stringbuilder et de faire tout changement que vous voulez dans C# en remplaçant les valeurs spécifiques que vous pouvez définir comme {{ma valeur}} par exemple

//the html code --> id='{{my id}}' src='{{img url }}' 

//the c# code -->  _yourStringBuilder.ToString().Replace("{{my id}}",id of the image).Replace("{{img url }}",url of the image) 



//** You can add any animation and css style you want**