VB.Net和多选框

时间:2019-04-23 20:55:40

标签: vb.net

我需要能够在multiselect框中显示一个值,但存储另一个值。我正在使用的API向我返回了商品的GUID及其名称。所以我想向用户显示名称并使用GUID作为ID或键,因为如果我选择或取消选择它而不是文本,我需要向包括GUID的api发送一个调用。 我还没有找到一种为multiselectbox分配键和文本的方法,这就是我目前创建项目的方式

clbBucketList.Items.Add(BucketList(Index).text, False)

帮助中显示对象,但不确定是否可以创建键和文本对象。如果通用MS控件不支持此功能,那么是否有3方控件可以做到这一点?

1 个答案:

答案 0 :(得分:1)

您应该定义一个具有GUID和名称属性的类型,并创建该类型实例的列表。然后,您可以将该列表绑定到CheckedListBox并设置DisplayMember,以便显示包含名称的属性。然后,您可以将CheckedItems集合中的项目强制转换为您的类型,并从其他属性获取GUID值。

项目类型:

Public Class Bucket

    Public Property Guid As Guid
    Public Property Name As String

End Class

绑定:

Dim buckets As New List(Of Bucket)

For Each item In BucketList
    Dim bucket As New Bucket With {.Guid = GetGuid(item),
                                   .Name = GetName(item)}

    buckets.Add(bucket)
Next

clbBucketList.DataSource = buckets
clbBucketList.DisplayMember = "Name"

通常我会说您应该将DataSource放在最后,但是以我的经验,这会导致CheckedListBox出现问题。

数据检索:

Dim guids As New List(Of Guid)

For Each bucket As Bucket In clbBucketList.CheckedItems
    guids.Add(bucket.Guid)
Next