4

CheckedListBox 中的项目是否有标签?或者类似的东西?我希望能够存储与我正在显示的项目相关联的 ID。

4

3 回答 3

7

您不需要 Tag 属性。该控件接受任何对象,这意味着您不必只在其中放入字符串。创建一个包含字符串(并被覆盖ToString())和您需要的任何其他数据成员的类。

Public Class Form1

    Protected Overrides Sub OnLoad(ByVal e As System.EventArgs)
        MyBase.OnLoad(e)

        CheckedListBox1.Items.Add(New MyListBoxItem() With {.Name = "One", .ExtraData = "extra 1"})
        CheckedListBox1.Items.Add(New MyListBoxItem() With {.Name = "Two", .ExtraData = "extra 2"})
    End Sub

    Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
        For Each obj As Object In CheckedListBox1.CheckedItems
            Dim item As MyListBoxItem = CType(obj, MyListBoxItem)
            MessageBox.Show(String.Format("{0}/{1} is checked.", item.Name, item.ExtraData))
        Next
    End Sub
End Class

Public Class MyListBoxItem
    Private _name As String
    Private _extraData As String

    Public Property Name As String
        Get
            Return _name
        End Get
        Set(ByVal value As String)
            _name = value
        End Set
    End Property

    Public Property ExtraData As String
        Get
            Return _extraData
        End Get
        Set(ByVal value As String)
            _extraData = value
        End Set
    End Property

    Public Overrides Function ToString() As String
        Return Name
    End Function

End Class

(被覆盖的ToString()内容决定了将在框中显示的内容。)

于 2010-02-13T04:37:09.217 回答
2

您可以从 CheckedListBox 继承您自己的控件并创建一个属性,在 C# 中它是这样的,其余功能保持与继承相同,因此不需要进一步的额外代码:

公共类 MyCheckedListbox:System.Windows.Forms.CheckedListBox{
    私有对象 thisObj;
    公共对象标签{
       获取{返回 this.thisObj; }
       设置{ this.thisObj = value; }
    }
}

编辑:决定包括 VB.NET 版本以使每个人都受益...

公共类 MyCheckedListBox 继承 System.Windows.Forms.CheckedListBox
    私有 thisObj 作为对象
    公共属性标记为对象
      得到
        标签 = thisObj
      结束获取
      设置(objParam 作为对象)
        thisObj = objParam
      结束集
    结束属性
结束类

当然,这很简单,使用拳击,但效果很好......

希望这可以帮助

于 2010-02-04T23:16:48.247 回答
0

tommieb75 对 VB.NET 的回答翻译:

Public Class MyCheckedListbox 
    Inherits System.Windows.Forms.CheckedListBox 
    Private thisObj As Object 
    Public Property Tag() As Object 
        Get 
            Return Me.thisObj 
        End Get 
        Set(ByVal value As Object) 
            Me.thisObj = value 
        End Set 
    End Property 
End Class

我在 www.developerfusion.com/tools 使用翻译器

于 2010-02-04T23:40:01.433 回答