2017-10-04 109 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**