2011-10-21 65 views
2

這個問題讓我撓了撓頭!我會盡可能簡潔。設計師強制將資源嵌入到表單中,而不是使用Resources.resx?

在高水平:

的問題是,雖然項目工作正常,代碼看起來不錯。每當我編輯和構建某些表單時,Visual Studio都會以非常不希望的方式重寫*.Designer.cs文件。

我相當確信這些*.Designer.cs文件在過去未被編輯(特別是自動生成的部分)。

更詳細:

我們的項目使用了自定義的控制,其中一些來自PictureBox繼承。在存在這些控件的窗體上,如果我查看*.Designer.cs文件,我可以看到未設置Image屬性,或者Image屬性指的是存儲在項目的resx文件中的圖像,如下所示,這樣很好,很好。

this.customButton.Image = global::MyProject.Properties.Resources.buttonImage; 

但是,如果我只是通過增加另一個控制修改此表(將另一個按鈕拖到形式)和建設項目,Visual Studio中廣泛編輯MyForm.Designer.csMyForm.resx文件,即使是在窗體上存在的控件沒有被觸及。看來,它嵌入在MyForm.resx文件由控制所需的所有圖像,然後是指他們在MyForm.Designer.cs如下:

System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MyForm)); 
this.customButton.Image = ((System.Drawing.Image)(resources.GetObject("customButton.Image"))); 

這顯然不是我想要的。爲什麼Visual Studio希望表單現在使用本地資源,而不是嵌入在項目的Resources.resx文件中的表單,因爲它很樂意在表單修改之前進行操作?如果我去設計師,查看customButton的屬性,並嘗試將Image屬性設置爲項目資源文件中的圖像,但允許它,但在下一次單擊時,它將立即恢復到嵌入的本地引用在MyForm.resx中。

任何想法爲什麼會發生這種情況?

回答

3

我想通了這一點與another question

基本上幫助,即使我已經看到了幾項建議,以集中應用程序的資源在一個單一的組件,這似乎是一個不錯的選擇。 VS Designer不喜歡必須訪問當前程序集外部的資源,並且它可以這樣做,它也會更改您的代碼,將它們嵌入當前程序集中,從而阻止您將資源保留在一個組件。

我基本上不得不回頭去保留使用它們的程序集中的資源。