Saltar al contenido principal
Versión: 20

Columna de list box

Un list box está formado por uno o varios objetos columna que tienen propiedades específicas. Puede seleccionar una columna de list box en el editor de formularios haciendo clic en ella cuando el objeto list box está seleccionado:

Puede definir propiedades estándar (texto, color de fondo, etc.) para cada columna del list box; estas propiedades tienen prioridad sobre las del objeto list box.

Puede definir el tipo de expresión para las columnas de list box de tipo array (cadena, texto, número, fecha, hora, imagen, booleano u objeto).

Propiedades específicas de columna

Alpha Format - Alternate Background Color - Automatic Row Height - Background Color - Background Color Expression - Bold - Choice List - Class - Context Menu - Data Type (selection and collection list box column) - Date Format - Default Values - Display Type - Enterable - Entry Filter - Excluded List - Expression - Expression Type (array list box column) - Font - Font Color - Horizontal Alignment - Italic - Invisible - Maximum Width - Method - Minimum Width - Multi-style - Number Format - Object Name - Picture Format - Resizable - Required List - Row Background Color Array - Row Font Color Array - Row Style Array - Save as - Style Expression - Text when False/Text when True - Time Format - Truncate with ellipsis - Underline - Variable or Expression - Vertical Alignment - Width - Wordwrap

Eventos formulario soportados

Evento formularioAdditional Properties Returned (see Form event for main properties)Comentarios
On After Edit
  • column
  • columnName
  • row
  • On After Keystroke
  • column
  • columnName
  • row
  • On After Sort
  • column
  • columnName
  • headerName
  • Las fórmulas compuestas no se pueden ordenar.
    (por ejemplo, This.firstName + This.lastName)
    On Alternative Click
  • column
  • columnName
  • row
  • List box array únicamente
    On Before Data Entry
  • column
  • columnName
  • row
  • On Before Keystroke
  • column
  • columnName
  • row
  • On Begin Drag Over
  • column
  • columnName
  • row
  • On Clicked
  • column
  • columnName
  • row
  • On Column Moved
  • columnName
  • newPosition
  • oldPosition
  • On Column Resize
  • column
  • columnName
  • newSize
  • oldSize
  • On Data Change
  • column
  • columnName
  • row
  • On Double Clicked
  • column
  • columnName
  • row
  • On Drag Over
  • area
  • areaName
  • column
  • columnName
  • row
  • On Drop
  • column
  • columnName
  • row
  • On Footer Click
  • column
  • columnName
  • footerName
  • List box arrays, selección actual y selección temporal únicamente
    On Getting Focus
  • column
  • columnName
  • row
  • Propiedades adicionales devueltas sólo al editar una celda
    On Header Click
  • column
  • columnName
  • headerName
  • On Load
    On Losing Focus
  • column
  • columnName
  • row
  • Propiedades adicionales devueltas sólo cuando la modificación de una celda se completa
    On Row Moved
  • newPosition
  • oldPosition
  • List box array únicamente
    On Scroll
  • horizontalScroll
  • verticalScroll
  • On Unload

    Arrays de objetos en columnas

    Las columnas de list box pueden manejar arrays de objetos. Como los arrays de objetos pueden contener diferentes tipos de datos, esta nueva y poderosa funcionalidad permite mezclar diferentes tipos de entrada en las líneas de una misma columna, y mostrar también varios widgets. Por ejemplo, puede insertar una entrada de texto en la primera línea, una casilla de selección en la segunda y una lista desplegable en la tercera. Los arrays de objetos también dan acceso a nuevos tipos de widgets, como botones o selectores de color.

    El siguiente list box fue diseñado utilizando un array de objetos:

    Configurar una columna array de objetos

    To assign an object array to a list box column, you just need to set the object array name in either the Property list ("Variable Name" field), or using the LISTBOX INSERT COLUMN command, like with any array-based column. En la lista de propiedades, ahora puede seleccionar Objeto como "Tipo de expresión" para la columna:

    Las propiedades estándar relacionadas con las coordenadas, el tamaño y el estilo están disponibles para las columnas de tipo objeto. Puede definirlos utilizando la lista de Propiedades, o programando el estilo, el color de fuente, el color de fondo y la visibilidad para cada línea de una columna objeto del list box. Estos tipos de columnas también se pueden ocultar.

    Sin embargo, el tema Fuente de datos no está disponible para las columnas objeto del list box. De hecho, el contenido de cada celda de la columna se basa en los atributos presentes en el elemento correspondiente del array de objetos. Cada elemento de array puede definir:

    the value type (mandatory): text, color, event, etc. the value itself (optional): used for input/output. the cell content display (optional): button, list, etc. additional settings (optional): depend on the value type To define these properties, you need to set the appropriate attributes in the object (available attributes are listed below). Por ejemplo, puede escribir "¡Hola Mundo!" en una columna objeto utilizando este sencillo código:

    ARRAY OBJECT(obColumn;0) //array de columnas
    C_OBJECT($ob) //primer elemento
    OB SET($ob; "valueType"; "text") //define el tipo de valor (obligatorio)
    OB SET($ob; "value"; "Hello World!") //define el valor
    APPEND TO ARRAY(obColumn;$ob)

    El formato de visualización y los filtros de entrada no pueden definirse para una columna de objetos. Dependen automáticamente del tipo de valor.

    valueType y visualización de datos

    Cuando una columna de list box está asociada a un array de objetos, la forma en que se muestra, introduce o edita una celda se basa en el atributo valueType del elemento del array. Los valores valueType soportados son:

    • "text": para un valor de texto
    • "real": for a numeric value that can include separators like a \<space>, <.>, or <,>
    • "integer": para un valor entero
    • "boolean": para un valor True/False
    • "color": para definir un color de fondo
    • "event": para mostrar un botón con una etiqueta.

    4D utiliza widgets por defecto en función del valor "valueType" (es decir, un "text" se muestra como un widget de entrada de texto, un "boolean" como una casilla de selección), pero también están disponibles visualizaciones alternativas a través de opciones (por ejemplo, un real también se puede representar como un menú desplegable). La siguiente tabla muestra la visualización por defecto, así como las alternativas para cada tipo de valor:

    valueTypeWidget por defectoWidget(s) alternativo(s)
    textentrada de textomenú desplegable (lista obligatoria) o combo box (lista de selección)
    realentrada de texto controlada (números y separadores)menú desplegable (lista obligatoria) o combo box (lista de selección)
    integerentrada de texto controlada (números únicamente)menú desplegable (lista obligatoria) o combo box (lista de opciones) o casilla de verificación de tres estados
    booleancasilla de selecciónmenú desplegable (lista requerida)
    colorcolor de fondotext
    eventobotón con etiqueta
    Todos los widgets pueden tener un botón adicional de alternancia de unidades o un botón de elipsis asociado a la celda.

    Usted define la visualización de la celda y las opciones utilizando atributos específicos en cada objeto (ver abajo).

    Formatos de visualización y filtros de entrada

    No se pueden definir formatos de visualización ni filtros de entrada para las columnas objeto de los list box. Se definen automáticamente en función del tipo de valor. Estos están listados en la siguiente tabla:

    Tipo de valorFormato por defectoControl de entrada
    textlo mismo que se define en el objetocualquiera (sin control)
    reallo mismo que se define en el objeto (utilizando el separador decimal del sistema)"0-9" y "." y "-"
    "0-9" y "." si min>=0
    integerlo mismo que se define en el objeto"0-9" y "-"
    "0-9" si min>=0
    Booleancasilla de selecciónN/A
    colorN/AN/A
    eventoN/AN/A

    Atributos

    Cada elemento del array de objetos es un objeto que puede contener uno o más atributos que definirán el contenido de la celda y la visualización de los datos (ver el ejemplo anterior).

    El único atributo obligatorio es "valueType" y sus valores soportados son "text", "real", "integer", "boolean", "color" y "event". La siguiente tabla lista todos los atributos soportados en los arrays de objetos de los list box, en función del valor "valueType" (cualquier otro atributo se ignora). A continuación se detallan los formatos de visualización y se ofrecen ejemplos.

    valueTypetextrealintegerbooleancolorevento
    AtributosDescription
    valuevalor de la celda (entrada o salida)xxx
    minvalor mínimoxx
    maxvalor máximoxx
    behaviorValor "tres Estados"x
    requiredListlista desplegable definida en objetoxxx
    choiceListcombo box definido en objetoxxx
    requiredListReferenceRefList 4D, depende del valor de "saveAs"xxx
    requiredListNameNombre de la lista 4D, depende del valor "saveAs"xxx
    saveAs"reference" o "value"xxx
    choiceListReferenceRefList 4D, muestra un combo boxxxx
    choiceListNameNombre de la lista 4D, mostrar combo boxxxx
    unitListarray de X elementosxxx
    unitReferenceíndice del elemento seleccionadoxxx
    unitsListReferenceVer lista de unidades 4Dxxx
    unitsListName4D lista nombre de la unidadxxx
    alternateButtonañadir un botón alternativoxxxxx

    value

    Los valores de las celdas se almacenan en el atributo "value". Este atributo se utiliza tanto para la entrada como para la salida. También puede utilizarse para definir valores por defecto cuando se utilizan listas (ver a continuación).

     ARRAY OBJECT(obColumn;0) //column array
    C_OBJECT($ob1)
    $entry:="Hello world!"
    OB SET($ob1;"valueType";"text")
    OB SET($ob1;"value";$entry) // if the user enters a new value, $entry will contain the edited value
    C_OBJECT($ob2)
    OB SET($ob2;"valueType";"real")
    OB SET($ob2;"value";2/3)
    C_OBJECT($ob3)
    OB SET($ob3;"valueType";"boolean")
    OB SET($ob3;"value";True)

    APPEND TO ARRAY(obColumn;$ob1)
    APPEND TO ARRAY(obColumn;$ob2)
    APPEND TO ARRAY(obColumn;$ob3)

    Los valores null se soportan y dan como resultado una celda vacía.

    min y max

    Cuando el "valueType" es "real" o "integer", el objeto también acepta atributos min y max con valores apropiados (los valores deben ser del mismo tipo que el valueType).

    Estos atributos pueden utilizarse para controlar el rango de valores de entrada. Cuando se valida una celda (cuando pierde el foco), si el valor de entrada es menor que el valor mínimo o mayor que el valor máximo, entonces se rechaza. En este caso, se mantiene el valor anterior y un consejo muestra una explicación.

     C_OBJECT($ob3)
    $entry3:=2015
    OB SET($ob3;"valueType";"integer")
    OB SET($ob3;"value";$entry3)
    OB SET($ob3;"min";2000)
    OB SET($ob3;"max";3000)

    behavior

    El atributo behavior ofrece variaciones a la representación estándar de los valores. En 4D v15, se ofrece una única variación:

    AtributoValor(es) disponible(s)valueType(s)Descripción
    behaviorthreeStatesintegerRepresenta un valor numérico como una casilla de verificación de tres estados.
    2=semi seleccionada, 1=seleccionada, 0=no seleccionada, -1=invisible, -2= deseleccionada desactivada, -3= seleccionada desactivada, -4=semi seleccionada desactivada
     C_OBJECT($ob3)
    OB SET($ob3;"valueType";"integer")

    OB SET($ob3;"value";-3)
    C_OBJECT($ob4)


    OB SET($ob4;"valueType";"integer")
    OB SET($ob4;"value";-3)
    OB SET($ob4;"behavior";"threeStates")

    requiredList y choiceList

    Cuando un atributo "choiceList" o "requiredList" está presente dentro del objeto, la entrada de texto se sustituye por una lista desplegable o un combo box, dependiendo del atributo:

    • Si el atributo es "choiceList", la celda se muestra como un combo box. Esto significa que el usuario puede seleccionar o escribir un valor.
    • Si el atributo es "requiredList", la celda se muestra como una lista desplegable y el usuario sólo puede seleccionar uno de los valores de la lista.

    En ambos casos, se puede utilizar un atributo "valor" para preseleccionar un valor en el widget.

    Los valores del widget se definen a través de un array. Si quiere asociar el widget a una lista 4D existente, debe utilizar los atributos "requiredListReference", "requiredListName", "choiceListReference" o "choiceListName".

    Ejemplos:

    • Quiere mostrar una lista desplegable con sólo dos opciones: "Open" o "Closed". "Closed" debe estar preseleccionado:
     ARRAY TEXT($RequiredList;0)
    APPEND TO ARRAY($RequiredList;"Open")
    APPEND TO ARRAY($RequiredList;"Closed")
    C_OBJECT($ob)
    OB SET($ob;"valueType";"text")
    OB SET($ob;"value";"Closed")
    OB SET ARRAY($ob;"requiredList";$RequiredList)

    • Quiere aceptar todo valor entero, pero mostrar un combo box para sugerir los valores más comunes:
     ARRAY LONGINT($ChoiceList;0)
    APPEND TO ARRAY($ChoiceList;5)
    APPEND TO ARRAY($ChoiceList;10)
    APPEND TO ARRAY($ChoiceList;20)
    APPEND TO ARRAY($ChoiceList;50)
    APPEND TO ARRAY($ChoiceList;100)
    C_OBJECT($ob)
    OB SET($ob;"valueType";"integer")
    OB SET($ob;"value";10) //10 como valor por defecto
    OB SET ARRAY($ob;"choiceList";$ChoiceList)

    requiredListName y requiredListReference

    Los atributos "requiredListName" y "requiredListReference" permiten utilizar, en una celda de list box, una lista definida en 4D, ya sea en modo Diseño (en el editor de Listas de la Caja de Herramientas) o por programación (utilizando el comando New list). La celda se mostrará entonces como una lista desplegable. Esto significa que el usuario sólo puede seleccionar uno de los valores proporcionados en la lista.

    Utilice "requiredListName" o "requiredListReference" en función del origen de la lista: si la lista procede de la caja de herramientas, pase un nombre; en caso contrario, si la lista se ha definido por programación, pase una referencia. En ambos casos, se puede utilizar un atributo "valor" para preseleccionar un valor en el widget.

    • Si desea definir estos valores a través de un simple array, debe utilizar el atributo "requiredList".
    • Si la lista contiene elementos de texto que representan valores reales, el separador decimal debe ser un punto ("."), independientemente de la configuración local, por ejemplo "17.6" "1234.456".

    Ejemplos:

    • Desea mostrar una lista desplegable basada en una lista de "colores" definida en la caja de herramientas (que contiene los valores "azul", "amarillo" y "verde"), guardarla como valor y mostrar "azul" por defecto:

     C_OBJECT($ob)
    OB SET($ob;"valueType";"text")
    OB SET($ob;"saveAs";"value")
    OB SET($ob;"value";"blue")
    OB SET($ob;"requiredListName";"colors")

    • Quiere mostrar una lista desplegable basada en una lista definida por programación y guardarla como referencia:
     <>List:=New list
    APPEND TO LIST(<>List;"Paris";1)
    APPEND TO LIST(<>List;"London";2)
    APPEND TO LIST(<>List;"Berlin";3)
    APPEND TO LIST(<>List;"Madrid";4)
    C_OBJECT($ob)
    OB SET($ob;"valueType";"integer")
    OB SET($ob;"saveAs";"reference")
    OB SET($ob;"value";2) //displays London by default
    OB SET($ob;"requiredListReference";<>List)

    choiceListName y choiceListReference

    Los atributos "choiceListName" and "choiceListReference" permiten utilizar, en una celda de list box, una lista definida en 4D, ya sea en modo Diseño (en el editor de Listas de la Caja de Herramientas) o por programación (utilizando el comando New list). La celda se muestra entonces como un combo box, lo que significa que el usuario puede seleccionar o escribir un valor.

    Utilice "choiceListName" o "choiceListReference" en función del origen de la lista: si la lista procede de la caja de herramientas, pase un nombre; en caso contrario, si la lista se ha definido por programación, pase una referencia. En ambos casos, se puede utilizar un atributo "valor" para preseleccionar un valor en el widget.

    • Si desea definir estos valores a través de un simple array, debe utilizar el atributo "choiceList".
    • Si la lista contiene elementos de texto que representan valores reales, el separador decimal debe ser un punto ("."), independientemente de la configuración local, por ejemplo "17.6" "1234.456".

    Ejemplo:

    Ejemplo:

     C_OBJECT($ob)
    OB SET($ob;"valueType";"text")
    OB SET($ob;"value";"blue")
    OB SET($ob;"choiceListName";"colors")

    unitsList, unitsListName, unitsListReference y unitReference

    Puede utilizar atributos específicos para añadir unidades asociadas a los valores de las celdas (*por ejemplo, *: "10 cm", "20 píxeles", etc.). Para definir la lista de unidades, puede utilizar uno de los siguientes atributos:

    • "unitsList": un array que contiene los elementos x utilizados para definir las unidades disponibles (por ejemplo: "cm", "pulgadas", "km", "millas", etc.). Utilice este atributo para definir las unidades dentro del objeto.
    • "unitsListReference": una referencia a una lista 4D que contiene las unidades disponibles. "unitsListReference": una referencia a una lista 4D que contiene las unidades disponibles.
    • "unitsListName": un nombre de una lista 4D basada en el diseño que contiene unidades disponibles. Utilice este atributo para definir las unidades con una lista 4D creada en la caja de herramientas.

    Independientemente de la forma en que se defina la lista de unidades, puede asociarse con el siguiente atributo:

    • "unitReference": un único valor que contiene el índice (de 1 a x) del elemento seleccionado en la lista de valores "unitList", "unitsListReference" o "unitsListName".

    Independientemente de la forma en que se defina la lista de unidades, puede asociarse con el siguiente atributo:

    Ejemplo:

    Queremos definir una entrada numérica seguida de dos posibles unidades: " líneas " o " píxeles ". El valor actual es "2" + "líneas". Utilizamos valores definidos directamente en el objeto (atributo "unitsList"):

    ARRAY TEXT($_units;0)
    APPEND TO ARRAY($_units;"lines")
    APPEND TO ARRAY($_units;"pixels")
    C_OBJECT($ob)
    OB SET($ob;"valueType";"integer")
    OB SET($ob;"value";2) // 2 "units"
    OB SET($ob;"unitReference";1) //"lines"
    OB SET ARRAY($ob;"unitsList";$_units)

    alternateButton

    Si desea añadir un botón de elipsis [...] a una celda, basta con pasar el "alternateButton" con el valor True en el objeto. El botón se mostrará en la celda automáticamente.

    Cuando este botón es presionado por un usuario, se generará un evento On Alternate Click, y usted podrá manejarlo como quiera (vea el párrafo "Manejo de eventos" para más información).

    Ejemplo:

    C_OBJECT($ob1)
    $entry:="Hello world!"
    OB SET($ob;"valueType";"text")
    OB SET($ob;"alternateButton";True)
    OB SET($ob;"value";$entry)

    valueType color

    El atributo valueType de valor "color" permite mostrar un color o un texto.

    • Si el valor es un número, se dibuja un rectángulo de color dentro de la celda. Ejemplo:
    C_OBJECT($ob4)
    OB SET($ob4;"valueType";"color")
    OB SET($ob4;"value";0x00FF0000)

    • Si el valor es un texto, entonces se muestra el texto (por ejemplo: "valor"; "Automatic").

    event valueType

    El "event" valueType muestra un botón que genera un evento On Clicked al ser presionado. No se puede pasar ni devolver ningún dato o valor.

    Opcionalmente, se puede pasar un atributo "label".

    Ejemplo:

    C_OBJECT($ob)
    OB SET($ob;"valueType";"event")
    OB SET($ob;"label";"Edit...")

    Gestión de eventos

    Se pueden manejar varios eventos mientras se utiliza un array list box de objetos:

    • On Data Change: un evento On Data Change se dispara cuando se ha modificado algún valor:
      • en un área de entrada de texto
      • en una lista desplegable
      • en un área combo box
      • en un botón de unidad (cambiar del valor x al valor x+1)
      • en una casilla de selección (cambia entre marcado/desmarcado)
    • On Clicked: cuando el usuario haga clic en un botón instalado con el "event" atributo valueType, se generará un evento On Clicked. Este evento es gestionado por el programador.
    • On Alternative Click: cuando el usuario haga clic en un botón de elipsis (atributo "alternateButton"), se generará un evento On Alternative Click. Este evento es gestionado por el programador.