2011-01-26 10 views
29

我已經使用VS2010創建了一個C#WinForms應用程序。我是新創建用戶控件,所以我創建了一個新的用戶控件(作爲同一個項目的一部分)。無法將表單上的用戶控件

當我重建項目時,新的控件出現在工具箱中。當我將控件從工具箱拖到窗體上時,出現以下錯誤。

無法加載工具箱項目'TagGroup'。它將從工具箱中刪除。

這發生了我創建用戶控件的唯一一次。我搜索了網頁,但我發現的大多數答案似乎與在單獨的程序集中進行控制有關。 (請注意,我發現了很多與我遇到的問題相同的問題。)

任何人都可以推薦我應該在哪裏看下?

+1

這將有助於顯示一些代碼。向我們展示類聲明和構造函數,儘管整個類將是最有幫助的。 – 2011-01-26 00:42:43

+2

將此隔離。當它沒有任何內容的普通UserControl => VS問題時它會發生嗎?沒問題=>注意在設計時運行的代碼。 – 2011-01-26 00:46:26

+0

你在構造函數中做什麼? IIRC,設計師會打電話給它,所以最好不要有任何外部呼叫。 – 2011-01-26 00:55:14

回答

32

我終於想出了這一個。

我正在使用的項目使用兩個類庫程序集。雖然這些與我正在討論的控件無關,但我查看並看到兩個庫的Properties | Build選項卡中的Platform Target都設置爲「Any CPU」。

另一方面,我的應用程序將此設置設置爲「x64」。通過將我的應用程序的設置更改爲「任何CPU」,我現在可以將我的用戶控件放到我的表單上。

去圖...

2

這裏同樣的問題。我猜測這與安裝在x64操作系統上的VS2010仍然是32位程序的事實有關。

可能想要嘗試的替代解決方案是打開TheFormThisUserControlIsSupposedToBeAddedTo.Designer.cs並使用代碼添加用戶控件。基本上,你正在做設計師應該做的骯髒工作。

這並不像聽起來那麼困難,尤其是,考慮到該文件中可能有大量示例代碼(例如,您使用Designer添加的按鈕)。唯一困難的部分是在表單中找出正確的座標以放置控件。

最終的結果是,您不能在Desinger中看到用戶控件,但它們會在調試/運行時添加。

31

我的應用程序需要64位。爲了在設計器中使用自定義用戶控件,我只是在解決方案中添加了一個新項目。這個新項目使用「AnyCPU」設置幷包含我所有的用戶控件。

我的解決方案包含以下項目:

  • MyApp的這是64位編譯我的主要項目(Windows窗體應用程序),並引用我的第二個項目
  • MyApp.UI。用戶控件(類庫)編譯爲「任何CPU」,包含我所有的用戶控件

就像一個魅力和它的清潔


順便說一句,有一個Microsoft support article約那個問題。

  • 操作:您嘗試在Microsoft Visual Studio集成開發環境(IDE)中使用64位組件。
  • 錯誤原因:此行爲是設計使然。 Visual Studio是一個32位的進程,因此只能執行32位模塊。儘管Visual Studio允許您添加對64位程序集的引用,但它實際上無法將JIT編譯爲64位並在進程中執行它。
  • 分辨率:
    1. 使用「AnyCPU」設置重新構建程序集。這將允許組件在32位進程(例如Visual Studio)或64位進程中運行。
    2. 添加程序集作爲參考,並在 運行時動態加載控件。儘管您仍然無法在Visual Studio中的任何設計器中使用 控件,但您仍然可以使用 編寫實例化控件所需的代碼並相應地設置它的 屬性。

來源:http://support.microsoft.com/kb/963017

6

我有這個問題太,但答案可能並不適合我。我的項目有一些問題,它只能單獨針對x86和x64。換句話說,我不能使用AnyCPU配置(這是因爲我爲每個配置引用不同的庫,因爲這些庫不適合AnyCPU)。

我想出的解決方案是:當我需要使用表單設計器時,我將設置更改爲x86。做這項工作,然後回到x64並測試。問題只發生在設計人員身上,但解決方案的構建和運行良好。

3

我在VS2015中遇到過這個問題,結果證明這很簡單。

我已經創建了一個用戶控件,通過從表單中剪切和粘貼一些現有的控件(將它們分組到自定義控件中)。自定義控件沒問題(沒有編譯錯誤),但是從現有窗體中刪除控件意味着應用程序無法編譯。當然,不能添加新控件意味着我無法使用引用自定義控件的代碼更新引用先前控件的代碼。

我所做的只是黑客和斜槓(註釋,創建臨時控件等),以便整個應用程序能夠編譯。編譯後,我發現我可以將自定義控件拖到窗體上(沒有引發此問題的錯誤)。然後,我必須解開並取消打開,以便代碼正確引用新的自定義控件。

-1

GO項目屬性,然後'生成'選項卡,並檢查'​​目標平臺'是'AnyCPU'。

0

我也遇到過這個問題,但原因不同。在我的情況下,組件(表單)構造函數或Load事件調用了其他地方使用反射來查找實現某個接口的所有類的方法。

儘管在運行時工作正常,但它在設計時產生了上述異常。 (使用類型加載異常作爲內部異常的類型初始化異常)。

0

凌晨3:36一小時困惑,疲憊的疑難解答在第二天再次輕鬆解決!
我在控件的文件名中修正了一個簡單的拼寫錯誤,所以它現在匹配了UserControl名稱,清理並重新構建,並且Bobs您的怪異的叔叔的貓。 :]