CheckedListBox 中的项目是否有标签?或者类似的东西?我希望能够存储与我正在显示的项目相关联的 ID。
问问题
4916 次
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 回答