Realisieren könntest du das z.B. wie folgt:
Angenommen folgende einfache Personen Klasse:
Public Class Person
Public Sub New(ByVal Vorname As String, _
ByVal Nachname As String, _
ByVal Alter As Integer, _
ByVal ID As Integer)
Me._Vorname = Vorname
Me._Nachname = Nachname
Me._Alter = Alter
Me._ID = ID
End Sub
Public Property ID() As Integer
Get
Return Me._id
End Get
Set(ByVal Value As Integer)
Me._id = Value
End Set
End Property
Public Property Alter() As Integer
Get
Return Me._Alter
End Get
Set(ByVal Value As Integer)
Me._Alter = Value
End Set
End Property
Public Property Vorname() As String
Get
Return _Vorname
End Get
Set(ByVal Value As String)
_Vorname = Value
End Set
End Property
Public Property Nachname() As String
Get
Return _Nachname
End Get
Set(ByVal Value As String)
_Nachname = Value
End Set
End Property
Public Overrides Function ToString() As String
Return Me.Nachname + ", " + Me.Vorname
End Function
Private _Vorname As String = Nothing
Private _Nachname As String = Nothing
Private _Alter As Integer = 0
Private _ID As Integer = 0
End Class Die ComboBox mit den Per. Instanzen füllen:
'// Füllen
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles Button1.Click
Me.ComboBox1.DrawMode = DrawMode.OwnerDrawFixed
Me.ComboBox1.DropDownStyle = ComboBoxStyle.DropDownList
Me.ComboBox1.Items.Add(New Person("Peter", "Lustig", 45, 1))
Me.ComboBox1.Items.Add(New Person("Klaus", "Meier", 66, 2))
End Sub Jetzt das wichtigste: In dieser Routine wird die Darstellung der CB festgelegt:
Private Sub ComboBox1_DrawItem(ByVal sender As Object, ByVal e As _
System.Windows.Forms.DrawItemEventArgs) Handles ComboBox1.DrawItem
If e.Index < 0 Then Return
Dim obj As Person = Me.ComboBox1.Items.Item(e.Index)
Dim br As New SolidBrush(e.ForeColor)
e.DrawBackground()
e.Graphics.DrawString(obj.Vorname, e.Font, br, e.Bounds.X, e.Bounds.Y)
e.Graphics.DrawString(obj.Nachname, e.Font, br, e.Bounds.X + 150, _
e.Bounds.Y)
e.Graphics.DrawString(obj.Alter, e.Font, br, e.Bounds.X + 300, _
e.Bounds.Y)
e.Graphics.DrawLine(New Pen(Color.Black, 1), e.Bounds.X + 130, _
e.Bounds.Y, e.Bounds.X + 130, e.Bounds.Y + 15)
e.Graphics.DrawLine(New Pen(Color.Black, 1), e.Bounds.X + 290, _
e.Bounds.Y, e.Bounds.X + 290, e.Bounds.Y + 15)
End Sub Die markierte ID d. Benutzers, könntest du z.B. so ermitteln:
Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
Dim p As Person = DirectCast(Me.ComboBox1.SelectedItem, Person)
MessageBox.Show("ID des Benutzers (" + p.ToString() + "): " + _
p.ID.ToString())
End Sub Das Bsp. ist zwar etwas unflexibel, aber so in etwa könntest du das umsetzen.
Steve |