Describes a combo-box widget. A combo-box represents a field or variable, and consists of a field value and an associated drop-down list of possible values.
COMBO-BOX [ LIST-ITEMS item-list | LIST-ITEM-PAIRS item-pair-list] [ INNER-LINES lines ] [ size-phrase ] [ SORT ] [ TOOLTIP tooltip ] [ SIMPLE | DROP-DOWN | DROP-DOWN-LIST ] [ MAX-CHARS characters] [ AUTO-COMPLETION [ UNIQUE-MATCH ] ] |
Use the following syntax to specify a combo-box widget for displaying values in a browse column:
COMBO-BOX [ LIST-ITEMS item-list | LIST-ITEM-PAIRS item-pair-list ] [ INNER-LINES lines] [ SORT ] [ DROP-DOWN | DROP-DOWN-LIST ] [ MAX-CHARS characters ] [ AUTO-COMPLETION [ UNIQUE-MATCH ] ] |
The INNER-LINES option in a SIMPLE combo-box definition is ignored.
For more information, see the SIZE phrase reference entry.
This option is invalid for combo-box browse columns. The AVM sets the ROW-HEIGHT-CHARS and ROW-HEIGHT-PIXELS attributes for a browse to the height of the combo-box, by default. You can override these settings after the browse is created.
You can add or change the TOOLTIP option at any time. If TOOLTIP is set to "" or the Unknown value (?), then the tooltip is removed. No tooltip is the default. The TOOLTIP option is supported in Windows only.
This option is invalid for combo-box browse columns.
This option is invalid for combo-box browse columns.
For combo-box browse columns, a drop-down button appears only when an editable combo-box column has focus. You can use a DROP-DOWN combo-box only for a CHARACTER column. If the current value of the combo-box is not a valid value in the combo-box's item list, the AVM still displays the value in the combo-box's edit control.
For combo-box browse columns, a drop-down button appears only when an editable combo-box column has focus. You can use a DROP-DOWN-LIST combo-box for a CHARACTER, DECIMAL, INTEGER, INT64, DATE, or LOGICAL column. If the current value of the combo-box is not a valid value, the AVM does not display the value in the combo-box's edit control when the combo-box receives focus.
Use MAX-CHARS with only SIMPLE and DROP-DOWN combo-boxes. It is ignored for DROP-DOWN-LIST combo-boxes. This option is supported in graphical interfaces only, and only in Windows.
The first example, r-combo.p, views a date field as a combo-box. When you run this procedure, you can choose a date value from the drop-down list. When you choose a new value, the VALUE-CHANGED trigger updates the value of out-string to an event associated with the new date value. The example initializes the drop-down list by building a comma-separated list of values and then assigning the string to the LIST-ITEMS attribute of the combo-box.
r-combo.p
DEFINE VARIABLE hist-date AS DATE NO-UNDO FORMAT "99/99/9999" VIEW-AS COMBO-BOX LIST-ITEMS 07/04/1776, 07/11/1969, 09/10/1993. DEFINE VARIABLE hist-event AS CHARACTER NO-UNDO INITIAL "Declaration of Independence,Man walks on moon,Progress Version 7 ships". DEFINE VARIABLE out-string AS CHARACTER NO-UNDO FORMAT "x(36)". DEFINE FRAME main-frame hist-date out-string WITH NO-LABELS TITLE "Historic Events". ON VALUE-CHANGED OF hist-date DO: out-string = ENTRY(SELF:LOOKUP(SELF:SCREEN-VALUE), hist-event). DISPLAY out-string WITH FRAME main-frame. END. ENABLE hist-date WITH FRAME main-frame. APPLY "VALUE-CHANGED" TO hist-date IN FRAME main-frame. WAIT-FOR WINDOW-CLOSE OF CURRENT-WINDOW. |
The following example, r-combo2.p, builds a combo-box based on field values from a database. It defines triggers that allow you to change the value of the combo-box without displaying the drop-down list. They allow you to scroll through the values using the CURSOR-DOWN and CURSOR-UP keys or to jump to a specific value by typing its first letter.
r-combo2.p
DEFINE VARIABLE ix AS INTEGER NO-UNDO. DEFINE VARIABLE rep AS CHARACTER NO-UNDO LABEL "Rep" VIEW-AS COMBO-BOX. DEFINE VARIABLE temp-string AS CHARACTER NO-UNDO. FORM rep WITH FRAME main-frame SIDE-LABELS. ON ANY-PRINTABLE OF rep DO: /* Find the first entry in the drop-down list that begins with the character typed. Set the SCREEN-VALUE of the combo box to that value. */ seek-item: DO ix = 1 TO SELF:NUM-ITEMS: IF SELF:ENTRY(ix) BEGINS LAST-EVENT:FUNCTION THEN DO: SELF:SCREEN-VALUE = SELF:ENTRY(ix). LEAVE seek-item. END. END. IF ix > SELF:NUM-ITEMS THEN BELL. END. ON CURSOR-DOWN OF rep DO: /* Change the SCREEN-VALUE of the combo box to the next value from the drop-down list. */ ix = SELF:LOOKUP(SELF:SCREEN-VALUE). IF ix < SELF:NUM-ITEMS THEN SELF:SCREEN-VALUE = SELF:ENTRY(ix + 1). END. ON CURSOR-UP OF rep DO: /* Change the SCREEN-VALUE of the combo box to the prev value from the drop-down list. */ ix = SELF:LOOKUP(SELF:SCREEN-VALUE). IF ix > 1 THEN SELF:SCREEN-VALUE = SELF:ENTRY(ix - 1). END. temp-string = "". FOR EACH Salesrep NO-LOCK: temp-string = IF temp-string = "" THEN SalesRep.SalesRep ELSE temp-string + "," + SalesRep.SalesRep. END. ASSIGN rep:LIST-ITEMS IN FRAME main-frame = temp-string. ENABLE rep WITH FRAME main-frame. |
Similarly, the LIST-ITEM-PAIRS option of the COMBO-BOX phrase requires a list of items (possibly quoted, depending on the combo-box's data type), such as ("a", 1, "b", 2, "c", 3), whereas the LIST-ITEM-PAIRS attribute of a combo-box requires a quoted list of items, such as ("a, 1, b, 2, c, 3").