Designer shows combobox but run time does not

A

active

I tried to use a datasource with a combobox and it didn't work completely so
I build a small test that was much more straight forward then the app.

The test was to see if the combobox dropdown list displayed the correct
data.

However, although the designer shows the combobox the combobox does not
show at runtime.

If you would be so kind as to cut the code below and paste it into a form
maybe you can easily see why the combobox does not display.



Thanks







Public Class Form1

Inherits System.Windows.Forms.Form

'Form overrides dispose to clean up the component list.

<System.Diagnostics.DebuggerNonUserCode()> _

Protected Overrides Sub Dispose(ByVal disposing As Boolean)

If disposing AndAlso components IsNot Nothing Then

components.Dispose()

End If

MyBase.Dispose(disposing)

End Sub

Friend WithEvents ComboBox1 As WindowsApplication1.StringWithIntegerComboBox

'Required by the Windows Form Designer

Private components As System.ComponentModel.IContainer

'NOTE: The following procedure is required by the Windows Form Designer

'It can be modified using the Windows Form Designer.

'Do not modify it using the code editor.

Private Sub InitializeComponent()

Me.ComboBox1 = New WindowsApplication1.StringWithIntegerComboBox

Me.SuspendLayout()

'

'ComboBox1

'

Me.ComboBox1.Location = New System.Drawing.Point(136, 139)

Me.ComboBox1.Name = "ComboBox1"

Me.ComboBox1.Size = New System.Drawing.Size(235, 21)

Me.ComboBox1.TabIndex = 0

'

'Form1

'

Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)

Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font

Me.ClientSize = New System.Drawing.Size(572, 341)

Me.Controls.Add(Me.ComboBox1)

Me.Name = "Form1"

Me.Text = "Form1"

Me.ResumeLayout(False)

End Sub

End Class

Public Class StringWithIntegerComboBox

Inherits System.Windows.Forms.ComboBox

Public Sub New()

MyBase.New()

Me.DataSource = myList

Me.DisplayMember = "Str"

Me.ValueMember = "Value"

myList.Add(New StringWithInteger("One", 1))

myList.Add(New StringWithInteger("Two", 2))

myList.Add(New StringWithInteger("Three", 3))

End Sub

Public myList As List(Of StringWithInteger) = New List(Of StringWithInteger)

End Class

Public Class StringWithInteger

Private mInteger As Integer

Private mString As String

Private mToStringDisplaysInteger As Boolean = False

Public Sub New(ByVal str As String, ByVal value As Integer)

mString = str

mInteger = value

End Sub

Public Function Clone() As StringWithInteger

Clone = New StringWithInteger(mString, mInteger)

End Function

Public Overrides Function ToString() As String

If mToStringDisplaysInteger Then

ToString = CStr(mInteger)

Else

ToString = mString

End If

End Function

Public Property Str() As String

Get

Str = mString

End Get

Set(ByVal text As String)

mString = text

End Set

End Property

Public Property ToStringDisplaysSingle() As Boolean

Get

ToStringDisplaysSingle = mToStringDisplaysInteger

End Get

Set(ByVal displayInteger As Boolean)

mToStringDisplaysInteger = displayInteger

End Set

End Property

Public Property Value() As Integer

Get

Value = mInteger

End Get

Set(ByVal numb As Integer)

mInteger = numb

End Set

End Property

End Class
 
L

Lloyd Sheen

Sorry don't have access to VS but it seems that you are adding the entries
after you bind the list to the combobox. Try it the other way or refresh
the combobox after you add the entries. I don't think that adding will
automatically cause the control to know there are entries. When you bound
the list was empty.

Lloyd Sheen
 
A

active

This test case works OK, but my app doesn't.

I'll try what you suggested on the app.

Thanks
 
A

active

You got that right. If I delay Binding until after I've filled the list it
displays OK.

Refreshing the combobox didn't work.

After I've changed data in the list I need a way to "unbind" the list and
"rebind" it.

How do you think I should do that?

Thanks for the help
 
L

Lloyd Sheen

Ok , still don't have access to code but if the refresh doesn't work then
you just need to rebind the datasource. When you bind it will refresh the
contents according to the new content. Just resetting the datasource
property should do it.

Lloyd
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top