2011-12-09 45 views
1

我有一個包含TreeView的Windows窗體。樹視圖爲其項目中嵌入資源的節點具有圖像。在我的開發機器上運行表單時(Visual Studio內外),它運行良好,treenodes每個都有其正確的映像。在生產箱上運行時,窗口在嘗試加載嵌入的圖像時會出現錯誤。如果發生這種情況,我添加了不使用圖像的邏輯,以便樹仍然顯示,但我想弄清楚問題是什麼以及如何解決問題。嵌入式圖像的.NET問題

嘗試創建新位圖時,返回的錯誤消息是通用「參數無效」。堆棧跟蹤將「System.Drawing.Bitmap..ctor(Type type,String resource)」行作爲故障點。請參閱下面的代碼。

ImageList imageListNodes = new ImageList(); 
Bitmap mIcon; 
mIcon = new Bitmap(this.GetType(), "m2.ico"); // This is the line that fails. 
imageListNodes.Images.Add("m", (Image)mIcon); 
tvRecords.ImageList = imageListNodes; // This is the treeview used in the form. 

文件m2.ico已直接添加到項目中。它的屬性包括Build Action = Embedded Resource,以及Copy to Output Directory =不復制。

我的開發計算機運行的是Windows 7,而且生產環境爲Windows Server 2003 SP2。該項目是在.NET 3.5中,他們都有。這種形式可以在不同的客戶端機器上使用,所以它應該能夠在Server 2003中運行起來。

感謝您的任何建議!

編輯: 在幾分鐘內,並且已經建議此設置根本不起作用。我在上面指出,這在我的電腦上都可以在Visual Studio調試模式下使用,並且可以在自己的電腦上調用。圖標文件本身在網絡共享上關閉,因此DLL無法將其拉入;文件必須正確嵌入,並且位圖/圖標轉換必須正常工作,否則在我的機器上根本無法工作。

我很欣賞這些建議,並且我願意嘗試其他方法來實現相同的目標,但請注意,我最初的問題至少是爲什麼這在我的計算機上運行,​​而不是另一個。謝謝!

+0

使用ILspy或反射器檢查生成的exe文件以查看資源是否實際位於部署的程序集中。 –

回答

0

嘗試使用Icon類而不是位圖。我不相信他們是兼容的。

編輯:只記得別的東西...圖標是一種多圖像格式。它們是位圖,但它可以包含不同分辨率的多個圖像。但是,就像@ PedroC88所說的,打電話給ToBitmap,它會轉換。雖然我認爲它使用的尺寸是系統確定的,您不能選擇。

+0

要轉換大小,您可以使用'Graphics'對象將其繪製成新的位圖,只需記住調整必要的屬性以避免質量下降,請檢查此msdn以獲取更多信息。 http://amzn.to/rtwL5V – PedroC88

1

我不認爲你可以像這樣將圖像加載到圖像中。爲什麼不嘗試先在Icon對象中加載圖標,然後調用Icon.ToBitmap來獲取圖像。