DesktopComboBox

From Xojo Documentation

Class (inherits from DesktopPopupMenu)


New in 2021r3

A ComboBox is a combination of a TextField and a PopupMenu. The user can type in the field or click to select an item from a list.

Events
SelectionChanged TextChanged
Properties
AllowAutoComplete Hint SelectedRowIndex
AllowFocusRing InitialValue fa-lock-32.png SelectedRowValue fa-lock-32.png
Bold Italic SelectionLength
FontName LastAddedRowIndex fa-lock-32.png SelectionStart
FontSize LastRowIndex fa-lock-32.png Text
FontUnit RowCount fa-lock-32.png Underline
Methods
AddAllRows RemoveAllRows RowValueAt
AddRow RemoveRowAt SelectRowWithTag
AddRowAt RowTagAt SelectRowWithValue

Notes

macOS

On macOs, the ComboBox height is limited to just a single size, so any changes to the Height property are ignored.

Additionally, the maximum number of visible rows in the dropdown is 15. You can adjust this number using this declare, passing in the ComboBox's handle for controlHandle:

Declare Sub setNumberOfVisibleItems Lib "AppKit" Selector "setNumberOfVisibleItems:" (controlHandle As Ptr, count As Integer)
setNumberOfVisibleItems(MyComboBox.Handle, 30)

Windows

On Windows, the ComboBox height is controlled by the font size, so any changes you make to the Height property are ignored.

Sample Code

This code in the Opening event handler populates a DesktopComboBox and sets the initial value to the current month:

Var s As String
Var last As Integer
s = "January,February,March,April,May,June,July," _
+ "August,September,October,November,December"
last = CountFields(s, ",")
For i As Integer = 1 To last
Me.AddRow(NthField(s, ",", i))
Next
Var d As DateTime = DateTime.Now
Var interval As New DateInterval(0, 1, 0)
d = d - interval
Me.ListIndex = d

The value of the SelectedRowIndex property contains the index of the selected item, but it does not indicate whether the user has entered a value into the DesktopComboBox. Examine the Value property to get the current menu selection or the value entered by the user. For example, the following line in the TextChanged event handler displays either the currently selected menu item or the value typed into the ComboBox.

Label1.Text = Me.Text

This code adds an item to a DesktopComboBox in its Opening event handler.

Me.AddRow("October")

This code opens a new window when an item is chosen.

Sub Change()
Var w As ListEditorWindow
If ComboBox1.Text = "Edit List..." Then
w = New ListEditorWindow
End If
End Sub

The following code changes the selected item in a DesktopComboBox

ComboBox1.SelectedRowIndex = 3

See Also

DesktopTextField, DesktopPopupMenu controls