iT邦幫忙

0

VisualStudio 2008 開啟 Form 發生的錯誤訊息

你好 , 我在一個A專案新增一個繼承的 FORM 去繼承 B專案裡的一個 FORM
A , B 專案在建置的時候都不會出現錯誤訊息,都線是專案建置成功。
B 專案的 FORM 可以正常的在設計階段開啟。
但是在下一次開啟 A 專案的時候卻出現以下錯誤訊息:

=> 無法將型別 'System.Windows.Forms.PropertyManager' 的物件轉換為型別 'System.Windows.Forms.CurrencyManager'

有時候也會出現助樣的錯誤訊息:

=> 服務容器中已存在服務System.Windows.Forms.Design.IEventHandlerService.
參數名:serviceType

A專案的 FORM 就無法打開了
找了很多的資料都無法查到是哪邊發生的問題。
有人解決過這個問題嗎? 為何會發生這樣的問題呢?
我的專案是 c# 專案。
感謝回應與解答說明, 謝謝。

2 個回答

4
賽門
iT邦超人 1 級 ‧ 2011-03-29 13:56:11
最佳解答

參考一篇文章:BindingContext 類別

其中有段話: 因為 BindingManagerBase 類別是抽象的,所以 Item 屬性的傳回型別若不是 CurrencyManager 就是 PropertyManager。

您可能在WinForm中有個Databind物件的回傳值是屬於PropertyManager, 而指定給屬性是CurrencyManager的容器, 因為C#無法進行型別轉換, 就出現這個錯誤.

這是我的猜想, 可能真正的解答會個十萬八千里, 主要是沒有看到實際的式碼.

另外的ServiceType...可個網頁在說這個問題: http://www.agusblog.com/wordpress/systemwindowsformsdesignieventhandlerservice-already-exists-in-the-service-container-201.htm

至於, 您要如何改程式, 得由您自已來處理了, 因為沒看到您的原始程式 .

iT

你好, 母Form和子Form都沒用到任何的 DataBind 物件。
之前開都很正常,不知為何今天開就出現這個問題。
謝謝。

賽門 iT邦超人 1 級 ‧ 2011-03-29 14:36:54 檢舉

抱歉....應該是說BindingContext....

由於大部分 Windows Form 應用程式會透過 BindingSource 進行繫結, 而BindingSource會以CurrenryManager來進行封裝, 或許您的程式中用到BindingManagerBase, 但另一方面又用了BindingSource, 導致CurrencyManager轉到PropertyManager的問題.

如果是這樣, 您可能需要考慮改一改程式....

但問題是, 您提到的之前都不會的情形, 這一點我覺得有再確認的必要. 不知道這個專案有沒有用其他電腦上的VS2008開啟過, 如果是, 您可能要回到上次開啟的電腦中去改程式, 因為, VS2008真的有些狀況不太對...我也經常一個專案拿到別台電腦開啟後, 再回來就開出一堆問題, 似乎和VS2008的環境有關...基本上, 應該都是宣告不嚴謹導致有時會被抓到, 有時不會....

4
lordrd
iT邦新手 2 級 ‧ 2011-03-30 00:10:04

列一下 MSDN 的說明供你參考~ VS 遇到狀況 建議可以先查一下 MSDN ~

問題一 :
CurrencyManager 衍生自 BindingManagerBase 類別。使用 BindingContext 來傳回 CurrencyManager 或 PropertyManager。實際傳回的物件將視傳遞至 BindingContext 的 Item 屬性的資料來源和資料成員而定。如果資料來源是只能傳回單一屬性的物件 (而不是物件清單),其型別將為 PropertyManager。例如,如果您指定 TextBox 做為資料來源,將傳回 PropertyManager。另一方面,如果資料來源是實作 IList、IListSource 或 IBindingList 介面的物件,則會傳回 CurrencyManager。

所以應是你程式執行的回傳值 在某個地方傳回的資料 跟你所希望的是不一樣的 !
檢查一下程式吧

問題二 :
去 batch build 先將所有產生的資料全都先 clean 掉
再 rebuild 一次試看看

我要發表回答

立即登入回答