I want to extend the basic ControlCollection in VB.NET so I can just add images and text to a self-made control, and then automaticly convert them to pictureboxes and lables.
So I made a class that inherits from ControlCollection, overrided the add method, and added the functionality.
But when I run the example, it gives a NullReferenceException.
Here is the 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
I searched on Google, and someone said that the CreateControlsInstance method needs to be overriden. So I did that, but then it gives InvalidOperationException with an innerException message of NullReferenceException.
How do I to implement this?
-
Why not inherit from UserControl to define a custom control that has properties like Text and Image?
From Nescio -
You are probably better off using just a generic collection anyways. Bieng Control Collection doesnt really do anything special for it.
puclic class MyCollection : Collection<Control>From mattlant -
If you're inheriting from Control.ControlCollection then you need to provide a New method in your class. Your New method must call ControlCollection's constructor (MyBase.New) and pass it a valid parent control.
If you haven't done this correctly, the NullReferenceException will be thrown in the Add method.
This could also be causing the InvalidOperationException in your CreateControlsInstance method
The following code calls the constructor incorrectly causing the Add method to throw a 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 ClassFrom roomaroo
0 comments:
Post a Comment