簡體   English   中英

無法在表單上放置用戶控件

[英]Cannot Place User Control on Form

我使用VS2010創建了一個C#WinForms應用程序。 我是創建用戶控件的新手,所以我創建了一個新的用戶控件(作為同一項目的一部分)。

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

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

這是我創建用戶控件的唯一時間。 我在網上搜索過,但我發現的大多數答案似乎與將控件放在一個單獨的程序集中有關。 (請注意,我發現了很多與我遇到的問題相同的問題。)

任何人都可以建議我下一步要看哪里?

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

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

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

像魅力一樣工作,很干凈


順便說一下,有一篇關於該問題的Microsoft支持文章

  • 操作:您嘗試在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

我終於想出了這一個。

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

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

去搞清楚...

我也有這個問題,但答案不適合我。 我的項目有一些問題,它只能分別針對x86和x64。 換句話說,我不能使用AnyCPU配置(因為我為每個配置引用了不同的庫,因為這些庫不適合AnyCPU)。

我想出的解決方案是:當我需要使用表單設計器時,我將設置更改為x86。 完成工作,然后重新設置為x64並進行測試。 問題只發生在設計人員身上,但解決方案構建並運行良好。

我在VS2015中遇到了這個問題,解決方案很簡單。

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

我所做的就是破解和刪減(注釋掉,創建臨時控件等),以便整個應用程序可以編譯。 編譯后我發現我可以將自定義控件拖到窗體上(沒有提示此問題的錯誤)。 然后我不得不unhack和unslash,以便代碼正確引用新的自定義控件。

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

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

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

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

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

雖然這在運行時工作正常,但它在設計時生成了上述異常。 (鍵入初始化異常,並將類型加載異常作為內部異常)。

凌晨3:36,一小時的困惑,疲憊的故障排除再次輕松解決,第二天就有了新的頭腦!
我在控件的文件名中修復了一個簡單的拼寫錯誤,所以它現在匹配了UserControl名稱,清理並重新構建了Bobs你怪異的叔叔的貓。 :]

GO項目屬性然后'Build'選項卡並檢查'Target Platform'是'AnyCPU'。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM