Inheriting from a vb.net combobox

Hi

I want to create a class from a ComboBox and modify the Add property so that when I do something like:

Me.cbMyCombo.Items.Add(objComboItem)

I can modify the data stored in the objComboItem variable within the new class.

Can anybody tell me how to do this?

John
IssacJonesAsked:
Who is Participating?

[Product update] Infrastructure Analysis Tool is now available with Business Accounts.Learn More

x
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

nepaluzCommented:
see below
Public Class MyCombo
    Inherits ComboBox
    Protected Overrides Sub SetItemCore(index As Integer, value As Object)
        MyBase.SetItemCore(index, value)

    End Sub
End Class

Open in new window

IssacJonesAuthor Commented:
I've tried your suggestion but it doesn't seem to be called i.e. I placed a breakpoint there and it wasn't called.
nepaluzCommented:
did you use the new combobox? e.g
Dim xCombo As New MyCombo
Form1.Controls.Add(xCombo)

Open in new window

or add the class and compile the project, then the MyCombo will appear at the top of the Toolbox.
Exploring ASP.NET Core: Fundamentals

Learn to build web apps and services, IoT apps, and mobile backends by covering the fundamentals of ASP.NET Core and  exploring the core foundations for app libraries.

IssacJonesAuthor Commented:
Hi

Yes, I have added the basic MyComboBox e.g.

Public Class MyComboBox
    Inherits System.Windows.Forms.ComboBox

    Sub New()

        ' This call is required by the designer.
        InitializeComponent()

        ' Add any initialization after the InitializeComponent() call.

    End Sub

   Protected Overrides Sub SetItemCore(ByVal index As Integer, ByVal value As Object)
        MyBase.SetItemCore(index, value)
    End Sub

End Class

This has been added to my solution and I have created a combo of this type.

What I want to do is when doing this (where cbMyCombo is of type MyComboBox):

Me.cbMyCombo.Items.Add(objComboItem)

is to override the Add so I can modify the objComboItem within the new class.

John
CodeCruiserCommented:
What do you want to achieve by overriding?
IssacJonesAuthor Commented:
Hi

I have made a little more progress with the following:

Public Class ExtendedComboBox
    Inherits System.Windows.Forms.ComboBox

    Sub New()

        ' This call is required by the designer.
        InitializeComponent()

        ' Add any initialization after the InitializeComponent() call.

    End Sub

    Public Overloads ReadOnly Property Items As ComboBox.ObjectCollection
        Get
            Return MyBase.Items
        End Get
    End Property

End Class

This allows me to deal with getting the Items property. What I now need to do is deal with the Add which is called when populating the combobox e.g.

Me.cbMyCombo.Items.Add(objComboItem)

What I'm trying to do is when objComboItem is passed into the combo it may contain text. I want to remove all whitespace from the text passed in within my inherited combobox. That is, if I pass in "    a test   ", then it would be stored and displayed as "a test".

I have been able to do this externally by stripping the white space before passing it into the combo box BUT it seems more logical to me that it is done within the combo i.e. in the process of passing it into the combo box so it is done automatically. Besides, I'm intrigued on how it can be done anyway.

I looks as if the Add memeber I'm trying to override does not exist in the combobox class but rather is in a parent of the combobox i.e.

ComboBox.ObjectCollection.Add Method

If I can override this then I can strip the whitespace during the "Add" process.

Can anybody tell me how to achieve this?

John
nepaluzCommented:
There are a few ways to skin a cat! Rather than override, why not implement your own Add method?
Public Class ExtendedComboBox
    Inherits System.Windows.Forms.ComboBox
    Sub MyAdd(ByVal Value As String)
        Me.Items.Add(Value.Trim)
    End Sub
End Class

Open in new window

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
IssacJonesAuthor Commented:
poor cat :)

Yes, good idea!

I'm still curious how to override the Add which is built in though.
nepaluzCommented:
I actually believe thats the only way to "override" it. Seems simple when you are looking for a complex solution, but that is its beauty!
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Visual Basic.NET

From novice to tech pro — start learning today.