El componente wxChoice es un cuadro de texto de sólo lectura en la que se muestra la opción elegida de las posibles, que se muestran en una lista desplegable. La lista desplegable sólo se muestra cuando se hace click en el componente, quedando oculta el resto del tiempo.
Para crear este componente debemos pasar al constructor la ventana padre, el identificador, la posición, el tamaño y estílo y como específico del componente un array de cadenas con la lista de opciones a elegir.
wxArrayString strings;
strings.Add(wxT("Opción 1"));
strings.Add(wxT("Opción 2"));
strings.Add(wxT("Opción 3"));
wxChoice* choice = new wxChoice(panel, ID_COMBOBOX, wxDefaultPosition, wxDefaultSize, strings);
En la mayoría de plataformas, este componente es similar al wxComboBox, que veremos a continuación, excepto porque en este el usuario no puede editar el texto. Lo cual puede subsanarse configurando el wxComboBox en modo sólo lectura.
wxChoice no tiene estilos propios, y genera el evento EVT_CHOICE cuando el usuario selecciona un elemento de la lista, procesado como un wxEVT_COMMAND_CHOICE_SELECTED.
Los métodos de los que cuenta esta clase son por ejemplo, Clear() para limpiar todas las opciones, Delete() para eliminar una de ellas, Insert() para insertar una opción nueva, FindString() para buscar una determinada opción, GetCount() para obtener el número de opciones disponibles, IsEmpty() para ver si hay alguna opción seleccionada y varios métodos para establecer y editar opciones como GetSelection(), SetSelection(), GetString(), SetString(), GetStringSelection() o SetStringSelection().
El componente wxComboBox es una combinación de dos componentes, un wxListBox (que veremos a continuación) y un campo de texto (wxStaticText) que te permite establecer y obtener el texto de manera totalmente independiente del wxListBox.
El campo de texto puede ser de sólo lectura, actuando como un wxChoice como vimos antes. Normalmente la lista está oculta hasta que el usuario hace click o pulsa un botón. Esto es una eficiente manera de que el usuario pueda tanto introducir una opción como seleccionarla de una lista de posibles.
Para crear el wxComboBox, debemos pasar al constructor la ventana padre, el identificador, la posición, el tamaño y estilo y además, el string con las opciones que queremos mostrar y si queremos o no que haya una opción incial establecida.
Los estilos con los que cuenta esta clase son wxCB_SIMPLE que crea un wxComboBox ordinario, wxCB_DROPDOWN que crea el wxComboBox con la lista desplegable hacia abajo, wxCB_READONLY que es como la anterior pero el campo de texto es de sólo lectura, por lo que sólo pueden seleccionarse las opciones predefinidas, y por último wxCB_SORT, que ordena la lista alfabéticamente.
Los eventos disponibles para este componente son dos, EVT_TEXT para cuando el texto es editado y EVT_COMBOBOX para cuando se selecciona una de las opciones predefinidas.
Los métodos con los que cuenta este componente son los mismos que los de wxChoice, añadiendo algunos como Copy() que copia el texto del campo de texto al portapapeles, Paste() que pega el texto del portapapeles en el campo de texto, GetValue() que obtiene el valor del campo de texto y SetValue(), que lo establece, SetSelection() que selecciona el texto del campo de texto entre dos posiciones dadas, Replace() que reemplaza el texto entre dos posiciones dadas por otro dado o Remove() que borra el texto entre dos posiciones dadas.
Un wxListBox se usa para seleccionar una o más opciones de una lista, numeradas desde cero. Las opciones se muestran en un cuadro con barra de desplazamiento, con las opciones marcadas en color inverso. Un wxListBox puede ser monoseleccionable, permitiendo sólo una selección posible, o multiseleccionable, permitiendo más de una.
El constructor funciona de la misma manera que el del wxComboBox, pasandole la ventana padre, el identificador, la posición, el tamaño, el estilo y el string con la lista de opciones.
Los estilos que podemos usar son wxLB_SINGLE, que crea un wxListBox ordinario (monoselección), wxLB_MULTIPLE, que permite la selección múltiple, wxLB_EXTENDED, que ademas de permitir más de una permite usar atajos de teclado para la selección, wxLB_HSCROLL, que crea una barra de desplazamiento horizontal si el contenido es demasiado ancho, wxLB_ALWAYS_SB, que siempre muestra una barra vertical (normalmente se inserta automáticamente cuando se sobrepasa un número determinado de opciones), wxLB_NEEDED_SB, que sólo crea la barra vertical cuando es necesaria y wxLB_SORT, que ordena la lista de opciones alfabéticamente.
Respecto a los eventos, existen dos, EVT_LISTBOX, que se genera cuando se selecciona un item, y EVTLISTBOX_DCLICK, que se genera cuando se hace doble click en una de las opciones.
Por último, los métodos con los que cuenta son: Deselect(), para quitar la selección de una opción, GetSelections(), que devuelve un vector de enteros con las posiciones de los elementos seleccionados, InsertItems(), que inserta los items dados antes de la posición dada, Selected() que devuelve un booleano dependiendo de si la posición dada está ocupada o no y Set() que vacia el wxListBox y añade las opciones dadas en un string.
Además, este componente cuenta con todos los métodos del componente wxChoice.