Erweitern von Control in VB.NET
-
02-07-2019 - |
Frage
Ich mag den Grund ControlCollection
in VB.NET erweitern, so kann ich nur Bilder hinzufügen und Text in eine selbstgemachten Kontrolle, und sie dann zu PictureBox und Lables automatisch konvertieren.
So habe ich eine Klasse, die von Control erbt, overrided die Add-Methode, und hinzugefügt, um die Funktionalität.
Aber wenn ich das Beispiel laufen, gibt es einen NullReferenceException
.
Hier ist der Code:
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
Ich suchte auf Google, und jemand sagte, dass die CreateControlsInstance
Methode außer Kraft gesetzt werden muss. Also tat ich das, aber dann gibt es InvalidOperationException
mit einer innerException
Nachricht von NullReferenceException
.
Wie kann ich das umsetzen?
Lösung
Warum erben nicht von Usercontrol definieren eine benutzerdefinierte Steuerelement, das Eigenschaften wie Text und Bild hat?
Andere Tipps
Sie sind wahrscheinlich besser dran sowieso nur eine generische Auflistung verwenden. Bieng Kontrolle Sammlung doesnt wirklich etwas Besonderes tun es.
puclic class MyCollection : Collection<Control>
Wenn Sie erben von Control.ControlCollection dann müssen Sie eine neue Methode in der Klasse liefern. Ihre neue Methode muss Control Konstruktor aufrufe (MyBase.New) und gibt ihnen eine gültige übergeordnete Steuerung.
Wenn Sie dies nicht richtig getan haben, wird die Nullreferenceexception in der Add-Methode geworfen werden.
Dies könnte auch die InvalidOperationException in Ihrem CreateControlsInstance Verfahren verursacht
Der folgende Code ruft der Konstruktor falsch die Add-Methode verursacht eine Nullreferenceexception zu werfen ...
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