ImageList vs resources:如何在Winforms中组织图像?

时间:2017-10-04 13:55:44

标签: .net winforms

TLDR:

在项目中组织图像的最佳模型是什么?是否常见并建议在启动时创建ImageList并通过其索引访问每个图像或者重新分配方式?无论如何,请解释原因。

详细问题:

我目前正在开发一款已经开发了很长一段时间的软件。它部分是用Visual Basic编写的,它在很大程度上依赖于ImageList类来组织软件各个部分的所有图像。在应用程序开始时,ImageList通过一个巨大的数组创建,该数组包含所有可访问的图像文件的所有名称。每当您需要图像时,您都需要访问此对象并通过列表中图像的索引获取图像。

据我所知,这在过去可能部分有用,因为visual studio中的资源使用起来并不方便,而且某些控件仅适用于这些列表,例如ToolBar(由{替换{3}})具有Poperty ImageList的类,每个按钮只在ImageList中获取其图像的索引。

我觉得应该放弃这个庞大的ImageList,并且应该在资源中组织这些图像的过程缓慢,但我不是主要的.net开发人员,并且不太了解winforms和最好的做法。

在TLDR中提到的问题:在项目中组织图像的最佳模型是什么?是否常见并建议在启动时创建ImageList并通过其索引访问每个图像或者重新分配方式?无论如何,请解释原因。

1 个答案:

答案 0 :(得分:0)

如果是wpf项目

我有两个想法

1)在窗口的xaml和xaml代码中添加一个stackpanel

例如

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) 如果你不担心cpu / ram的使用情况 你关心造型等很多,你可以做以下事情

另一个想法是使用webbrowser或cefsharp浏览器。 使用媒体库的html代码创建一个html文件,将您的文件设置为资源,然后从html代码中调用他们的资源URL。

您可以在stringbuilder中加载html代码,并通过替换您可以设置为{{my value}}的特定值来进行c#中所需的任何更改

//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**