By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
449,215 Members | 1,930 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 449,215 IT Pros & Developers. It's quick & easy.

Item doesn't show text on selection

P: n/a
Hi guys,

I have a problem with the combo box I'm writing on.
What I want is custom items, which are fine so far, but when I select
one the combo box shows the project name
("WindowsApplication1+ListItems")... What's wrong? The source code is below.

Thanks in advance!

Best regards,

HKSHK

#Region "ComboBoxVB6"
Public Class ComboBoxVB6
Inherits System.Windows.Forms.ComboBox

Public Class ListItems
Public Item As Object
Public ItemData As Long

Public Sub New(ByVal Item As Object, ByVal ItemData As Long)
Me.Item = Item
Me.ItemData = ItemData
End Sub

Public Property Text() As String
Get
Return Me.Item.ToString
End Get
Set(ByVal Value As String)
Me.Item = Value
End Set
End Property

Public Overridable Shadows Function ToString() As String
Return Me.Item.ToString
End Function
End Class
Public Function AddItem(ByVal item As Object) As Integer
Return AddItem(item, 0)
End Function
Public Function AddItem(ByVal Item As Object, ByVal ItemData As Long) As
Integer
Dim t As New ListItems(Item, ItemData)
Return Items.Add(t)
End Function

Public Property ItemData(ByVal index As Integer) As Long
Get
If TypeOf (Items.Item(index)) Is ListItems Then
Dim t As ListItems
t = Items.Item(index)
Return t.ItemData
Else
Return 0
End If
End Get
Set(ByVal Value As Long)
If TypeOf (Items.Item(index)) Is ListItems Then
Dim t As ListItems
t = Items.Item(index)
t.ItemData = Value
Items.Item(index) = t
Else
Dim t As New ListItems(Items.Item(index), Value)
Items.Item(index) = t
End If
End Set
End Property

Public Sub New()
Me.DrawMode = DrawMode.OwnerDrawFixed
End Sub

Protected Overrides Sub OnDrawItem(ByVal e As
System.Windows.Forms.DrawItemEventArgs)
'draw background & focus rect
e.DrawBackground()
e.DrawFocusRectangle()

'check if it is an item from the ListItems collection
If e.Index < 0 Then
'not an item, draw the text (indented)
e.Graphics.DrawString(Me.Text, e.Font, New SolidBrush(e.ForeColor),
e.Bounds.Left, e.Bounds.Top)
Else
'check if item is a ListItems item

If TypeOf (Me.Items(e.Index)) Is ListItems Then

'get item to draw
Dim item As ListItems = Me.Items(e.Index)

' draw text
e.Graphics.DrawString(item.Text, Font, New
SolidBrush(e.ForeColor), e.Bounds.Left, e.Bounds.Top)

Else
' it is not an ListItems item, draw it
e.Graphics.DrawString(Me.Items(e.Index).ToString() , e.Font, New
SolidBrush(e.ForeColor), e.Bounds.Left, e.Bounds.Top)
End If

MyBase.OnDrawItem(e)
End If

End Sub

Public Overrides Function ToString() As String
Dim t As ListItems
t = SelectedItem

Return t.ToString
End Function
End Class
#End Region
Jun 18 '06 #1
Share this Question
Share on Google+
1 Reply


P: n/a
Probably beacuse you're shadowing the ToString method in the ListItems
class. Try overriding it instead

/claes

"HKSHK" <hk***@gmx.net> wrote in message
news:44***********************@news.freenet.de...
Hi guys,

I have a problem with the combo box I'm writing on.
What I want is custom items, which are fine so far, but when I select one
the combo box shows the project name ("WindowsApplication1+ListItems")...
What's wrong? The source code is below.

Thanks in advance!

Best regards,

HKSHK

#Region "ComboBoxVB6"
Public Class ComboBoxVB6
Inherits System.Windows.Forms.ComboBox

Public Class ListItems
Public Item As Object
Public ItemData As Long

Public Sub New(ByVal Item As Object, ByVal ItemData As Long)
Me.Item = Item
Me.ItemData = ItemData
End Sub

Public Property Text() As String
Get
Return Me.Item.ToString
End Get
Set(ByVal Value As String)
Me.Item = Value
End Set
End Property

Public Overridable Shadows Function ToString() As String
Return Me.Item.ToString
End Function
End Class
Public Function AddItem(ByVal item As Object) As Integer
Return AddItem(item, 0)
End Function
Public Function AddItem(ByVal Item As Object, ByVal ItemData As Long) As
Integer
Dim t As New ListItems(Item, ItemData)
Return Items.Add(t)
End Function

Public Property ItemData(ByVal index As Integer) As Long
Get
If TypeOf (Items.Item(index)) Is ListItems Then
Dim t As ListItems
t = Items.Item(index)
Return t.ItemData
Else
Return 0
End If
End Get
Set(ByVal Value As Long)
If TypeOf (Items.Item(index)) Is ListItems Then
Dim t As ListItems
t = Items.Item(index)
t.ItemData = Value
Items.Item(index) = t
Else
Dim t As New ListItems(Items.Item(index), Value)
Items.Item(index) = t
End If
End Set
End Property

Public Sub New()
Me.DrawMode = DrawMode.OwnerDrawFixed
End Sub

Protected Overrides Sub OnDrawItem(ByVal e As
System.Windows.Forms.DrawItemEventArgs)
'draw background & focus rect
e.DrawBackground()
e.DrawFocusRectangle()

'check if it is an item from the ListItems collection
If e.Index < 0 Then
'not an item, draw the text (indented)
e.Graphics.DrawString(Me.Text, e.Font, New SolidBrush(e.ForeColor),
e.Bounds.Left, e.Bounds.Top)
Else
'check if item is a ListItems item

If TypeOf (Me.Items(e.Index)) Is ListItems Then

'get item to draw
Dim item As ListItems = Me.Items(e.Index)

' draw text
e.Graphics.DrawString(item.Text, Font, New
SolidBrush(e.ForeColor), e.Bounds.Left, e.Bounds.Top)

Else
' it is not an ListItems item, draw it
e.Graphics.DrawString(Me.Items(e.Index).ToString() , e.Font, New
SolidBrush(e.ForeColor), e.Bounds.Left, e.Bounds.Top)
End If

MyBase.OnDrawItem(e)
End If

End Sub

Public Overrides Function ToString() As String
Dim t As ListItems
t = SelectedItem

Return t.ToString
End Function
End Class
#End Region

Jun 19 '06 #2

This discussion thread is closed

Replies have been disabled for this discussion.