具有继承的自定义控件

时间:2016-01-30 17:59:21

标签: vb.net inheritance

我正在尝试创建一个继承ComboBox的新控件。我添加了一个新方法来完成我需要的工作,但是我希望通过ComboBox.Items访问它,同时保持其他所有内容不变。阴影似乎消灭了整个Items子类。如果不可能,我可以按照它的方式使用它,但是在子类中使用该方法对我来说似乎更合乎逻辑。

有没有办法做到这一点?

Public Class AdvComboBox
    Inherits System.Windows.Forms.ComboBox

    Public Class ComboItem
        Dim Text As String
        Dim ID As Long

        Public Sub New(ItemText As String, ItemID As Long)
            Text = ItemText
            ID = ItemID
        End Sub

        Public ReadOnly Property ItemText
            Get
                Return Text
            End Get
        End Property

        Public ReadOnly Property ItemID
            Get
                Return ID
            End Get
        End Property
    End Class

    'This is the method I'd like to access from ComboBox.Items
    Public Sub AddAdvItem(DisplayText As String, ID As Long)
        DisplayMember = "ItemText"
        ValueMember = "ItemID"
        Items.Add(New ComboItem(DisplayText, ID))
    End Sub
End Class

1 个答案:

答案 0 :(得分:0)

可以通过遮蔽它来将Items属性替换为您自己的实现。例如。 Public Shadows ReadOnly Property Items As CustomObjectCollection

然后,您可以创建自己的CustomObjectCollection类,该类引用内置的Items集合并公开所有必需的方法和新的方法。

然而,尽管如此,我总是会使用外部列表/字典/数据表/ BindingList作为数据,并将其绑定到Combobox而不是使用Items集合。