2014-05-22 47 views
1

我在VB.NET中有Windows窗體應用程序它運行良好,我手動添加了一些代碼事件,沒有設計器,像這樣:錯誤「值不能爲空參數名稱:objectType」當在設計器中打開VB.NET Windows窗體

Private Sub bindingNavigatorAddNewItem_Click(sender As System.Object, e As System.EventArgs) Handles BindingNavigatorAddNewItem.Click

namesBindingSource.AddNew()

End Sub

和一個在Form1.Designer.vb,InitializeComponent方法此代碼

AddHandler Me.BindingNavigatorAddNewItem.Click, AddressOf Me.bindingNavigatorAddNewItem_Click

現在,即使窗體運行正常,並且正確地執行事件;形式在設計時失敗,出現錯誤:

Value cannot be null. Parameter name: objectType

at System.ComponentModel.TypeDescriptor.TypeDescriptionNode.GetRuntimeType(Type objectType) at System.ComponentModel.TypeDescriptionProvider.GetRuntimeType(Type reflectionType) at Microsoft.VisualStudio.Design.MultiTargetingContextProvider.GetRuntimeType(Type objectType) at Microsoft.VisualStudio.Design.Serialization.CodeDom.HandlesClauseManager.GetFieldType(String fieldName, Type documentBaseType) at Microsoft.VisualStudio.Design.Serialization.CodeDom.HandlesClauseManager.GetReferencedComponentType(String componentName, CodeTypeDeclaration codeTypeDecl, ITypeResolutionService loader, IDictionary& cache) at Microsoft.VisualStudio.Design.Serialization.CodeDom.HandlesClauseManager.ParseHandlesClauses(CodeTypeDeclaration codeTypeDecl, Boolean updateCache) at Microsoft.VisualStudio.Design.Serialization.CodeDom.VSCodeDomParser.OnMethodPopulateStatements(Object sender, EventArgs e) at System.CodeDom.CodeMemberMethod.get_Statements() at System.ComponentModel.Design.Serialization.TypeCodeDomSerializer.Deserialize(IDesignerSerializationManager manager, CodeTypeDeclaration declaration) at System.ComponentModel.Design.Serialization.CodeDomDesignerLoader.PerformLoad(IDesignerSerializationManager manager) at Microsoft.VisualStudio.Design.Serialization.CodeDom.VSCodeDomDesignerLoader.PerformLoad(IDesignerSerializationManager serializationManager) at System.ComponentModel.Design.Serialization.BasicDesignerLoader.BeginLoad(IDesignerLoaderHost host)

現在,我發現,如果我通過設計師結合的情況下它不會發生,而不是手動。

但我仍然需要手動完成它,因爲它最終將由一些DTE自動化代碼生成。

此外,如果在錯誤發生後,我按下「忽略並繼續」鏈接,它會在設計時顯示出正確的形式,但爲什麼它首先失敗?

回答

0

發現,事件的代碼需要有「把手......」條款刪除,就像

Private Sub bindingNavigatorAddNewItem_Click(sender As System.Object, e As System.EventArgs)

namesBindingSource.AddNew()

End Sub

現在的形式,直接從第一次設計正確打開。我不得不使用AddHandler語句添加處理程序。

+0

不,不,不。 @StevieTimes的答案是WTG。您的答案將刪除事件處理程序 - 您知道如果您單擊**忽略並繼續**,它會刪除所有事件處理程序和表單設計器呈現 - 但您已經實際刪除了所有事件!你的答案建議做*忽略並繼續*手動! –

+0

對不起,但是,沒有事件被刪除,它們仍然被觸發,以供進一步參考查看VB窗體模板嚮導生成的代碼。NET,適用於Visual Studio的MySql,請參閱https://dev.mysql.com/downloads/windows/visualstudio/ –

+0

您的答案是從綁定導航器中刪除* Handles *(即事件訂閱),因此您要刪除事件。 Stevie的回答允許你保持形式事件的機智。 –

5

這裏是你如何解決這個問題:

  1. 進入表單代碼
  2. 公共類(表單名)和末級之間刪除所有內容。

打開表單設計器。它是否正常打開?

如果是的話,你是在正確的軌道上。

將代碼放回;一點一點地繼續刪除代碼,直到表單打開。你刪除的最後一個代碼是問題。

這發生在事件處理程序包含對不存在對象的引用時。例如,如果您在窗體上放置按鈕,請創建Click事件處理程序,然後從窗體中刪除此按鈕。

+0

謝謝,您的解決方案有點兒詳細闡述(由於需要逐漸添加代碼)。這是我發佈其他答案的方式。 –

+0

如果您不知道需要刪除「手柄」的事件,該怎麼辦?就我而言,我沒有像你那樣的有約束力的來源事件,但我仍然有問題。 – StevieTimes

+0

對於我的問題(爲此我發佈了該問題),所有事件處理程序都必須使用Handles關鍵字(即解決方案)。 –

1

我發現這個問題,以及其他原因......

檢查大/小寫在你的事件名稱!我們的一個控件被重命名,所以它是CtlBlah而不是ctlBlah。事件仍然是小寫。切換到適當的情況下,以匹配實際控制固定它。

+0

是的,顯然這可能會發生很多原因。 –

相關問題