将ComboBox绑定到自定义集合

在运行时以编程方式将项目添加到组合框非常简单。 只需声明对象,然后调用

ComboBox.Items.Add(...)您要添加的每个项目。 此方法的一个缺点是,您无法为显示成员(在ComboBox项中显示的文本)和value成员(当您查询组合框的SelectedValue属性时返回的值) 指定值

解决这个问题的简单方法是将组合框绑定到对象集合。 绑定组合框时,可以指定源(集合),显示成员的名称和值成员的名称。 您指定的名称对应于对象属性的名称。

因此,我们需要创建两个类。 一个用于组合框中的每个项目,另一个用于将它们全部组合在一起并用作数据源的通用集合类。 让我们开始吧。

在我的示例中,项目类表示状态。 每个州都有一个长名和一个短名,如印刷的街道地址中所用。 该类仅包含两个属性和一个简单的构造函数。


Public Class State
    Private _ShortName As String
    Public Property ShortName() As String
        Get
            Return _ShortName
        End Get
        Set(ByVal value As String)
            _ShortName = value
        End Set
    End Property 
    Private _LongName As String
    Public Property LongName() As String
        Get
            Return _LongName
        End Get
        Set(ByVal value As String)
            _LongName = value
        End Set
    End Property
    Public Sub New(ByVal shortName As String, ByVal longName As String)
        Me.ShortName = shortName
        Me.LongName = longName
    End Sub
End Class 
现在定义了项目类,我还需要一个收集类。 通过继承CollectionBase类,我可以访问用于添加,删除和排序对象的内置方法。 我还可以使用集合类构造函数来填充集合并对项目进行排序。

Public Class States
    Inherits CollectionBase
    Public Sub New()
        InnerList.Add(New State("QLD", "Queensland"))
        InnerList.Add(New State("NSW", "New South Wales"))
        InnerList.Add(New State("VIC", "Victoria"))
        InnerList.Add(New State("TAS", "Tasmania"))
        InnerList.Add(New State("WA", "Western Australia"))
        InnerList.Add(New State("SA", "South Australia"))
        InnerList.Add(New State("NT", "Northern Territory"))
        InnerList.Add(New State("ACT", "Australian Capital Territory"))
        InnerList.Sort(New StatesComparer)
    End Sub
    Friend Class StatesComparer
        Implements IComparer
        Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer Implements System.Collections.IComparer.Compare
            If TypeOf (x) Is State And TypeOf (y) Is State Then
                Return DirectCast(x, State).LongName < DirectCast(y, State).LongName
            Else
                Throw New Exception("Object is not of type State")
            End If
        End Function
    End Class
End Class 
子类StatesComparer处理项目的排序。 由于每个项目都是自定义类,因此需要定义对项目进行排序的方法。 由于CollectionBase的Innerlist属性是一个Arraylist,因此用于定义实现IComparer接口的排序需求的类。 排序类仅向其父类Compare提供一个函数。 该函数接受两个参数-集合中的两个不同项-并根据第一个参数是否小于(出现在集合中)第二个参数,返回true或false。

现在,我有了填充和排序的项目集合,我所要做的就是将组合框绑定到它。 没关系

如果需要在组合框之前调用它,则执行此操作。

Dim comboStates As New ComboBox()
comboStates.DataSource = New States
comboStates.DisplayMember = "LongName"
comboStates.ValueMember = "ShortName" 

From: https://bytes.com/topic/visual-basic-net/insights/914065-binding-combobox-custom-collection

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值