2009-07-22 42 views
7

我做了直接從ErrorProvider控件繼承控制。我認爲將它應用於ToolboxBitmap屬性足以讓我的控件在原始控件的工具箱上具有相同的圖標,但它不會。奇怪的是,就像我將控件添加到窗體一樣,它會顯示爲它應該的樣子,但它不會更改工具箱的圖標。我在這裏錯過了什麼?我已經重新啓動了visual studio,並保持這種行爲。有我的用戶有自己的圖標工具箱上

[ToolboxBitmap(typeof(ErrorProvider))] 
public class ErrorProviderEx : ErrorProvider { 
... 
} 
+0

只是FYI:這些類型的控件是Web自定義控件(WCC),而不是Web用戶控件(WUC)。 WUC是用於Web項目範圍的ascx文件,WCC用於機器範圍...因此,在您的情況下,您應該在您的問題中編寫WCC,以避免混淆其他人。 – 2009-07-22 06:36:25

+1

我不知道你在說什麼。這是System.Windows.Forms.ErrorProvider。 – 2009-07-22 06:38:28

+0

如果您提供位圖的「硬編碼」路徑(ToolboxBitmap(「c:\\ my.bmp」)它是否仍顯示默認位圖? – 2009-07-22 06:40:38

回答

5

在Visual Studio 2008中,通過ToolBoxBitmap指定的圖標不被添加到工具箱用於任何在出於性能原因,當前解決方案的組件。標準的「齒輪」圖標被使用。如果您通過「工具箱...添加項目...」對話框手動添加組件,自定義圖標將顯示您正在遇到的行爲。而且,當您將ErrorProviderEx拖到表單中時,將使用您指定的圖標,這也是註釋中記下的行爲。

注意,你的情況,你正在使用typeof(ErrorProvider)這樣你就不必使用自定義位圖的正常問題。 (這種行爲對於Visual Studio 2005也是如此)。Visual Studio 2003通過顯示圖標來破壞我們。)(我個人不喜歡這種新行爲,我願意爲IDE等一兩秒鐘。檢索解決方案中的所有控件和組件的圖標。我不知道是否有一個註冊表黑客以顯示圖標。)

2

它在同一個項目中嗎?或者你正在引用的DLL?

referncing一個固定的DLL時,您只能得到適當的圖標。嘗試構建一個控制DLL並引用它。

1

所以是一個變通那裏。假設你的UserControl在「MyControl」項目中,爲它自己添加一個引用。即:在MyControl項目中引用MyControl項目,就像在另一個項目中那樣。然後,該圖標也將顯示在該MyControl項目的工具箱中。

0

最簡單的方法,以確保在工具欄圖標將顯示是創建一個16x16的bmp文件,放置在你的控件的項目文件夾,然後將其設置爲嵌入的資源。

我們來看一個相對簡單的例子:假設您有一個名爲的組件,我的公司.Components.MyControl。創建一個16x16位圖並將其保存到MyCompany.Components.MyControl項目文件夾的根目錄,如MyControl.bmp。然後右鍵單擊MyControl.bmp文件並選擇屬性>構建操作>嵌入式資源。此時,您還有一步:在類定義上添加ToolboxBitmap屬性(如果使用部分類,則將該屬性放置在控件的主.cs文件中 - 而不是在Designer.cs文件中)。要做到這一點,使用此語法:

[ToolboxBitmap(typeof(MyControl), "MyControl.bmp")] 

一定要確保:

  • 爲您MyControl項目類的命名空間爲您的項目出現在溶液中的文件夾結構相匹配。
  • 可能看起來很明顯,但請確保您引用了您的bmp文件的正確名稱。

無論何時將控件添加到工具箱,無論是手動添加還是以編程方式添加,都會顯示您的位圖。