을 확장하 ControlCollection 에 VB.NET
-
02-07-2019 - |
문제
나는 확장하려는 기본적인 ControlCollection
에 VB.NET 그래서 내가 추가 할 수 있습니다 이미지 및 텍스트를 자기로 만든 다음 제어를 자동적으로 변환하 pictureboxes 및 lables.
그래서 내가 만든 상속하는 클래스에서 ControlCollection,overrided 추가 방법 추가 기능이 있습니다.
하지만 실행할 때를 들어,그것은 NullReferenceException
.
는 코드는 다음과 같습니다:
Shadows Sub add(ByVal text As String)
Dim LB As New Label
LB.AutoSize = True
LB.Text = text
MyBase.Add(LB) 'Here it gives the exception.
End Sub
검색에 구글,그리고 사람이 말했다 CreateControlsInstance
방법을 사용해야 합 무.그래서 나는,그러나 그것은 InvalidOperationException
로 innerException
의 메시지 NullReferenceException
.
어떻게 이를 구현하려면?
해결책
왜에서 상속 정렬 을 정의할 사용자 지정 제어하는 것과 같은 속성을 가지고 텍스트와 이미지?
다른 팁
당신은 아마 더 나은 사용에 대한 포괄적인 컬렉션입니다.Bieng 제어 컬렉션은 정말 무엇이 특별한다.
puclic class MyCollection : Collection<Control>
만약 당신이에서 상속하 제어합니다.ControlCollection 다음을 제공해야 하는 새로운 방법에서 당신의 클래스입니다.새로운 메소드를 호출해야 합 ControlCollection 의 생성자(MyBase.새로운)와 그것을 전달하는 유효한 상위 제어합니다.
만약 코드를 사용하지 않았다면 이것이 제대로 든에서 발생합니다 추가 방법입니다.
이 있을 수 있으 InvalidOperationException 에서 당신의 CreateControlsInstance 방법
다음 코드를 생성자를 호출합니다 잘못의 원인을 추가하는 방법을 던져 든...
Public Class MyControlCollection
Inherits Control.ControlCollection
Sub New()
'Bad - you need to pass a valid control instance
'to the constructor
MyBase.New(Nothing)
End Sub
Public Shadows Sub Add(ByVal text As String)
Dim LB As New Label()
LB.AutoSize = True
LB.Text = text
'The next line will throw a NullReferenceException
MyBase.Add(LB)
End Sub
End Class