簡體   English   中英

具有UserControl的表單在VS2013中打開,但在VS2015中不打開

[英]Form with UserControl opens in VS2013 but not in VS2015

我有一個最初在VS2010中創建的Windows窗體應用程序。 我已經將它遷移到VS2013和VS2015。 應用程序編譯正常並在VS2015中運行,但如果我嘗試打開特定表單,設計器崩潰會發出以下錯誤:

Error HRESULT E_FAIL has been returned from a call to a COM component. 

它沒有給出導致錯誤的代碼行,但它確實給出了一個調用堆棧,如下所示:

at System.Runtime.InteropServices.Marshal.ThrowExceptionForHRInternal(Int32 errorCode, IntPtr errorInfo)
at Microsoft.VisualStudio.LanguageServices.Implementation.Utilities.Exceptions.ThrowEFail()
at Microsoft.VisualStudio.LanguageServices.Implementation.CodeModel.CodeTypeRef.LookupTypeSymbol()
at Microsoft.VisualStudio.LanguageServices.Implementation.CodeModel.CodeTypeRef.get_TypeKind()
at EnvDTE.CodeTypeRef.get_TypeKind()
at Microsoft.VisualStudio.Design.Serialization.CodeDom.VSCodeDomParser.GetUrtTypeFromVsType(CodeTypeRef vsType)
at Microsoft.VisualStudio.Design.Serialization.CodeDom.VSCodeDomParser.OnTypePopulateMembers(Object sender, EventArgs e)
at System.CodeDom.CodeTypeDeclaration.get_Members()
at Microsoft.VisualStudio.Design.Serialization.CodeDom.MergedCodeDomParser.CodeTypeDeclarationPopulator.OnPopulateMembers(Object sender, EventArgs e)
at System.CodeDom.CodeTypeDeclaration.get_Members()
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 Microsoft.VisualStudio.Design.Serialization.CodeDom.VSCodeDomDesignerLoader.DeferredLoadHandler.Microsoft.VisualStudio.TextManager.Interop.IVsTextBufferDataEvents.OnLoadCompleted(Int32 fReload)  

我很確定這與我在表單上使用自定義控件這一事實有關。 自定義控件的代碼如下:

Public Class ctlServiceItem
Implements IComponent

Private _SelectedItem As AP_Data.AP_InvoiceService.SelectedItemEnum = AP_Data.AP_InvoiceService.SelectedItemEnum.NA
Public Event SelectedItemChanged As EventHandler
Public Property SelectedItem As AP_Data.AP_InvoiceService.SelectedItemEnum
    Get
        Return _SelectedItem
    End Get
    Set(value As AP_Data.AP_InvoiceService.SelectedItemEnum)
        _SelectedItem = value
        Select Case SelectedItem
            Case AP_Data.AP_InvoiceService.SelectedItemEnum.NA
                rbNA.Checked = True
            Case AP_Data.AP_InvoiceService.SelectedItemEnum.OK
                rbOK.Checked = True
            Case AP_Data.AP_InvoiceService.SelectedItemEnum.Replaced
                rbReplaced.Checked = True
            Case AP_Data.AP_InvoiceService.SelectedItemEnum.Required
                rbRequired.Checked = True
            Case AP_Data.AP_InvoiceService.SelectedItemEnum.Suggested
                rbSuggested.Checked = True
        End Select
        RaiseEvent SelectedItemChanged(Me, EventArgs.Empty)
    End Set
End Property

Public Property HeaderText As String
    Get
        Return GroupBox1.Text
    End Get
    Set(value As String)
        GroupBox1.Text = value
    End Set
End Property

Private _Added As Boolean
Public Property Added As Boolean
    Get
        Return _Added
    End Get
    Set(value As Boolean)
        _Added = value
        If _Added Then
            rbReplaced.Text = "Added"
        Else
            rbReplaced.Text = "Replaced"
        End If
    End Set
End Property

Private Sub rbOK_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles rbOK.CheckedChanged
    _SelectedItem = AP_Data.AP_InvoiceService.SelectedItemEnum.OK
    RaiseEvent SelectedItemChanged(Me, EventArgs.Empty)
End Sub

Private Sub rbSuggested_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles rbSuggested.CheckedChanged
    _SelectedItem = AP_Data.AP_InvoiceService.SelectedItemEnum.Suggested
    RaiseEvent SelectedItemChanged(Me, EventArgs.Empty)
End Sub

Private Sub rbRequired_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles rbRequired.CheckedChanged
    _SelectedItem = AP_Data.AP_InvoiceService.SelectedItemEnum.Required
    RaiseEvent SelectedItemChanged(Me, EventArgs.Empty)
End Sub

Private Sub rbReplaced_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles rbReplaced.CheckedChanged
    _SelectedItem = AP_Data.AP_InvoiceService.SelectedItemEnum.Replaced
    RaiseEvent SelectedItemChanged(Me, EventArgs.Empty)
End Sub

Private Sub rbNA_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles rbNA.CheckedChanged
    _SelectedItem = AP_Data.AP_InvoiceService.SelectedItemEnum.NA
    RaiseEvent SelectedItemChanged(Me, EventArgs.Empty)
End Sub

End Class

另一個控制是

Public Class ctlServiceTireItem
Implements IComponent

Private _SelectedItem As AP_Data.AP_InvoiceService.SelectedItemEnum = AP_Data.AP_InvoiceService.SelectedItemEnum.NA
Public Event SelectedItemChanged As EventHandler
Public Property SelectedItem As AP_Data.AP_InvoiceService.SelectedItemEnum
    Get
        Return _SelectedItem
    End Get
    Set(value As AP_Data.AP_InvoiceService.SelectedItemEnum)
        _SelectedItem = value
        Select Case SelectedItem
            Case AP_Data.AP_InvoiceService.SelectedItemEnum.NA
                rbNA.Checked = True
            Case AP_Data.AP_InvoiceService.SelectedItemEnum.OK
                rbOK.Checked = True
            Case AP_Data.AP_InvoiceService.SelectedItemEnum.Replaced
                rbReplaced.Checked = True
            Case AP_Data.AP_InvoiceService.SelectedItemEnum.Required
                rbRequired.Checked = True
            Case AP_Data.AP_InvoiceService.SelectedItemEnum.Suggested
                rbSuggested.Checked = True
        End Select
        RaiseEvent SelectedItemChanged(Me, EventArgs.Empty)
    End Set
End Property

Public Property HeaderText As String
    Get
        Return GroupBox1.Text
    End Get
    Set(value As String)
        GroupBox1.Text = value
    End Set
End Property

Private Sub rbOK_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles rbOK.CheckedChanged
    _SelectedItem = AP_Data.AP_InvoiceService.SelectedItemEnum.OK
    RaiseEvent SelectedItemChanged(Me, EventArgs.Empty)
End Sub

Private Sub rbSuggested_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles rbSuggested.CheckedChanged
    _SelectedItem = AP_Data.AP_InvoiceService.SelectedItemEnum.Suggested
    RaiseEvent SelectedItemChanged(Me, EventArgs.Empty)
End Sub

Private Sub rbRequired_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles rbRequired.CheckedChanged
    _SelectedItem = AP_Data.AP_InvoiceService.SelectedItemEnum.Required
    RaiseEvent SelectedItemChanged(Me, EventArgs.Empty)
End Sub

Private Sub rbReplaced_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles rbReplaced.CheckedChanged
    _SelectedItem = AP_Data.AP_InvoiceService.SelectedItemEnum.Replaced
    RaiseEvent SelectedItemChanged(Me, EventArgs.Empty)
End Sub

Private Sub rbNA_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles rbNA.CheckedChanged
    _SelectedItem = AP_Data.AP_InvoiceService.SelectedItemEnum.NA
    RaiseEvent SelectedItemChanged(Me, EventArgs.Empty)
End Sub

End Class

如果需要,我可以為表單提供設計器代碼,但它很龐大。 控件在工具箱中顯示為Project控件,就像它們應該的那樣。 它只是在一個版本的VS而不是更新的版本中在設計師中打開是沒有意義的。 因為它確實在早期版本中工作,所以我真的希望它只是一個模糊的設置或類似的東西。

更新:我嘗試創建一個全新的空白表單。 我能夠將控件拖到新表單上,它們顯示正常。 當我關閉表單並在設計器中重新打開它時,我得到了與上面相同的錯誤。 問題肯定在於用戶控件。

我在https://social.msdn.microsoft.com/Forums/en-US/97bfbff4-651c-47e4-8aaa-25fa2273b1b5/designer-crash-in-vs2015-in-windows-forms的底部找到了答案?論壇= winformsdesigner

出於某種原因,我在項目中引用了我自己的項目。 我認為這是讓早期版本的Visual Studio中的項目識別自己的控件的技巧。 看起來這是在VS 2015中修復的。一旦項目沒有自己的引用,帶有用戶控件的表單顯示正常。

暫無
暫無

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

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