2009-06-11 19 views
2

我已經創建了一個自定義控件,該控件包含在由VB Forms應用程序引用的控件庫中。當我更改自定義控件時,爲什麼表單會崩潰?

當我修改控制,並有在VS窗口打開的應用程序,通常VS問我,如果我要重新加載已更改的項目。

但是,有幾次,它沒有問我這個,當我打開包含修改後的控件的窗體時,出現一個錯誤窗口,警告我如果忽略錯誤消息並繼續,那麼我冒險讓VS不穩定。我學會了忽略這個錯誤信息,繼續,並立即保存表單到一個新的文件。

有沒有其他人有這個問題?這是VS中的錯誤嗎?

+0

你能給我們提供實際的錯誤信息和關於你的設置的更多信息嗎?像你有1或2個VS實例打開? – JaredPar 2009-06-11 20:31:44

+0

對不起,我不記得實際的錯誤信息 - 它基本上說有什麼不對,如果我繼續下去,那麼設計師可能會變得不穩定。它有一個指向後面的代碼的鏈接,用於初始化生成的組件。 我正在使用2 VS窗口 - 一個用於編輯ControlLibrary,另一個用於客戶端(好吧....實際上我有4 - 2個其他項目也打開:) – 2009-06-12 02:11:35

回答

0

該問題似乎是對不再存在的控件的引用,有時是因爲控件所在的.dll htat文件不再可用。當我在控制庫上執行「全部清理」時,我發現了這一點,然後在打開引用控件的表單時出現錯誤 - 當我在控制庫中「重新構建全部」時,出現問題。

0

它更可能是一個錯誤在你的控制。 VS表單設計師實際上會在設計器中創建一個控件實例,所以如果你的控件做了一些事情,比如伸出一個數據庫,它會拋出一個異常並阻止表單正確呈現。

它實際上完全可以從Visual Studio的另一個實例附加一個調試器,換上的代碼行斷點在用戶控件 - 從那裏,你可以縮小其中的代碼行導致的一個問題。

一旦你發現這是造成問題的線,這個包裹是:當控制在設計師的渲染,否則爲false

If Me.DesignMode Then 
    Return 
End If 

DesignMode屬性返回True。此屬性不是100%可靠的。如果您在另一個控件中有一個控件,則該子控件的DesignMode屬性將爲False。當你有幾層嵌套控件時,痛苦的痛苦與痛苦。

2

你可能序列化的屬性,你不打算,並造成意想不到的變化。看看設計師的代碼,看看設計師爲你的控制創造了什麼。

您可以將以下屬性添加到屬性,以防止系列化:

進口System.ComponentModel

<DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)> _ 
0

的問題是不是與控件本身 - 我不幹VS後,並加載項目回在(被刪除的表單的新緊急保存副本)中工作正常。

所以,我不認爲這是與編寫的代碼的任何問題,因爲一切工作正常,只要我沒有打開的應用程序,同時修改控制(這是另一個庫)。

可能的原因涉及到形式未保存的更改,並通過修改窗體創建的變化?

0

我也有這個問題。避免它的最好方法是創建一個新版本的控件,例如SimpleKeyboard3,然後確保從表單中刪除舊的,然後將其替換爲新的。否則,表單可能會引用屬性或其他不能再引用的內容。

或者,你可以刪除你的表單控件,然後修改控制,然後將其重新添加到工具欄,然後拖動它放回你的表格。

即使它被丟棄,您仍然可以通過選擇「忽略並繼續......這可能會使設計器不穩定」選項來修復它,以便您可以刪除該控件。

相關問題