Вопрос

Я хочу расширить базовый 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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top