Gibt es ein Tag für ein Element in der CheckedListBox? Oder etwas Ähnliches? Ich möchte in der Lage sein, zu speichern und ID mit dem Element, das ich anzeige verbunden.
Antworten
Zu viele Anzeigen?Sie brauchen keine Tag-Eigenschaft. Das Steuerelement akzeptiert jedes Objekt, d.h. Sie müssen nicht nur Strings eingeben. Erstellen Sie eine Klasse, die eine Zeichenkette hat (und überschriebenes ToString()
) und alle anderen Datenelemente, die Sie benötigen.
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
(Der überschriebene ToString()
bestimmt, was in der Box angezeigt wird).
Sie können Ihr eigenes Steuerelement von CheckedListBox erben und eine Eigenschaft erstellen. In C# würde das so aussehen, der Rest der Funktionalität bleibt derselbe, wie er geerbt wird, so dass kein weiterer zusätzlicher Code erforderlich ist:
public class MyCheckedListbox : System.Windows.Forms.CheckedListBox{
private object thisObj;
public object Tag{
get{ return this.thisObj; }
set{ this.thisObj = value; }
}
}
Editar: Ich habe mich entschlossen, auch die VB.NET-Version einzubeziehen, damit alle davon profitieren...
Public Class MyCheckedListBox Inherits System.Windows.Forms.CheckedListBox
Private thisObj As Object
Public Property Tag As Object
Get
Tag = thisObj
End Get
Set (objParam As Object)
thisObj = objParam
End Set
End Property
End Class
Natürlich ist dies einfach und verwendet Boxen, aber es funktioniert gut...
Ich hoffe, das hilft
Übersetzung der Antwort von tommieb75 in 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
Ich benutze den Übersetzer auf www.developerfusion.com/tools
0 Stimmen
Ist dies für Windows Forms, WPF, Silverlight, oder ASP.NET Web Forms? (Es ist fast lustig, es gibt so viele Möglichkeiten in diesen Tagen, aber ich muss fragen).