Расширение ControlCollection в VB.NET
-
02-07-2019 - |
Вопрос
Я хочу расширить базовый ControlCollection
в VB.NET, поэтому я могу просто добавлять изображения и текст в самодельный элемент управления, а затем автоматически преобразовывать их в графические поля и метки.
Поэтому я создал класс, наследуемый от ControlCollection, переопределил метод add и добавил функциональность.
Но когда я запускаю пример, он дает 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
Я искал в Google, и кто-то сказал, что CreateControlsInstance
метод необходимо переопределить.Я так и сделал, но потом это дает InvalidOperationException
с innerException
сообщение NullReferenceException
.
Как мне это реализовать?
Решение
Почему бы не наследовать от Пользовательский контроль определить пользовательский элемент управления, имеющий такие свойства, как текст и изображение?
Другие советы
В любом случае вам, вероятно, лучше использовать только общую коллекцию.Bieng Control Collection на самом деле не делает для этого ничего особенного.
puclic class MyCollection : Collection<Control>
Если вы наследуете Control.ControlCollection, вам необходимо предоставить новый метод в своем классе.Ваш новый метод должен вызвать конструктор ControlCollection (MyBase.New) и передать ему действительный родительский элемент управления.
Если вы сделали это неправильно, в методе Add будет выброшено исключение NullReferenceException.
Это также может вызывать исключение InvalidOperationException в вашем методе CreateControlsInstance.
Следующий код вызывает конструктор неправильно, в результате чего метод Add выдает исключение NullReferenceException...
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