2009-12-31 32 views
0

有一段非常煩人的時間,它爲一組UserControls開發了一些代碼,這些代碼使用相當簡陋的繼承。基本上,它們是三個不同的細節視圖,它們都是從一個單一的基類繼承而來,後者又實現了一個單一的接口。帶繼承UserControls的Visual Studio 2008 IDE錯誤

接口IBaseDetailView

類BaseDetailView:實現IBaseDetailView

類DetailView1:繼承BaseDetailView 類DetailView2:繼承BaseDetailView 類DetailView3:繼承BaseDetailView

然後,我有一個複合用戶控件,將單獨的DetailViews 1-3在TabControl的一個選項卡上。

很簡單的東西。一切都編譯好,所有的用戶控件都可以在工具箱中使用,並且可以拖放到任何形式。但有一個問題...

他們最初顯示和什麼不是,但在臭名昭着的臭名昭着的「對象的實例未設置爲引用」錯誤編譯出來後。

現在,瞭解更多信息...如果我在每個DetailView混凝土/派生類中註釋掉Form_Load事件,則此錯誤消失,表單可以在設計模式下查看。 Form_Load事件有ado.net調用到似乎觸發錯誤的sql服務器。

通過Form_Load事件,我不會在編譯時收到任何錯誤,並且我可以在調試或發佈模式下運行應用程序時沒有問題。我不能用DesignMode中的UserControls查看任何窗體。

我添加了If Me.DesignMode然後返回到Form_Load事件,但它沒有工作。我認爲VS2008實際上是試圖在UserControls中運行代碼...我使用了這個命令,但是我還沒有找到解決方案。任何幫助深表感謝!

回答

0

在Form_Load方法的屬性/字段周圍放置一個空檢查。我們遇到類似的問題,因爲設計師在設計時似乎使用FormLoad,而不是您期望的。

還有一個您可以使用的DesignMode屬性。

我希望這會有所幫助。

+0

Thanks Burt!我確實檢查了控件上的designmode屬性,但由於某些古怪的原因,它會註冊爲false ...我將嘗試使用空檢查... – bbqchickenrobot 2009-12-31 22:21:48