2017-10-04 60 views
0

TLDR:ImageList vs资源:如何在Winforms中组织图像?

在项目中组织图像的最佳模式是什么?这是常见的,并建议在启动时创建一个ImageList,并通过其索引访问每个图像,或者支持要走的路?无论如何,请解释原因。

详细的问题:

我目前工作的一个软件,其已经开发了相当一段时间了。它部分用Visual Basic编写,它主要依靠ImageList类来组织软件每个部分中的所有图像。在应用程序开始时,ImageList通过巨大的数组创建,其中包含所有可以访问的图像文件的所有名称。无论何时您需要图像,您都需要访问此对象,并通过列表中图像的索引获取图像。

我知道这在过去可能有部分用处,因为visual studio中的资源并不便于使用,有些控件仅适用于这些列表,例如ToolBar(取代为ToolStrip)类有一个Poperty ImageList,每个按钮只在ImageList中获取其图像的索引。

我觉得应该放弃这个庞大的ImageList,并且应该慢慢迁移到在资源中组织这些图像,但我不是主要的.NET开发人员,也不太了解winforms及其最佳实践。

就像在TLDR中提出的那样:在项目中组织图像的最佳模型是什么?这是常见的,并建议在启动时创建一个ImageList,并通过其索引访问每个图像,或者支持要走的路?无论如何,请解释原因。

+0

意见的问题是题外话。 Winforms虽然仍然支持,但现在还没有开发。就是这样。 – LarsTech

+1

ImageList应仅用于为ListView和TreeView提供图像,其深层复制行为使其无法管理大量图像集合。你应该使用'List '。不要忘记在不再需要时处理()它们。 –

回答

0

如果它是一个WPF项目

我有两个想法在脑海

1)添加在窗口中的XAML一个StackPanel和你的XAML代码

例如

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代码中调用其资源网址。

您可以载入你的HTML代码中的StringBuilder和更换,你可以为设置特定值使在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**