El hecho de que Xojo sea un IDE significa, entre otras muchas cosas, que ofrece una completa librería de controles gráficos listos para usar en el diseño gráfico de las interfaces de usuario de nuestras aplicaciones, y varios de ellos están relacionados con la entrada de datos por parte de los usuarios. Uno de los principales es el TextField, disponible para la creación de aplicaciones Desktop, Web (WebTextField) y iOS (iOSTextField). Se trata del más básico y admite una única línea de texto. Eso sí, no por ello deja de ser un control realmente flexible.
Definir contenido: Text
La propiedad más importante de este control es Text, puesto que con ella podremos recuperar el texto que haya tecleado el usuario sobre dicho campo de texto y también podremos asignar cualquier otro contenido de tipo texto (Text o String) para que sea mostrado por el control en cuestión, con la particularidad de que podrá ser editado por el usuario. Dicha propiedad está disponible en todas las plataformas de despliegue soportadas sin variaciones.
Evidentemente, podemos definir el texto mostrado como punto de partida por el control en el apartado Initial State del Panel Inspector. Aquí también encontramos la propiedad CueText, en aplicaciones Desktop y Web, o PlaceHolder en las aplicaciones iOS. En cualquier caso, el texto introducido aquí será el mostrado de forma discreta por el control cuando esté vacío, ofreciendo así una indicación al usuario del tipo de entrada esperada por la aplicación.
Opcionalmente, la implementación Desktop y Web de este control también ofrece la propiedad HelpTag. Aquí es donde podremos introducir el texto a mostrar al usuario, como pequeña ayuda, sobre el proósito del control. Dicho texto se mostrará automáticamente cuando el usuario deje el apuntador del ratón sobre el ratón durante un breve periodo de tiempo.
Contraseñas
En otros casos también es muy conveniente la propiedad de tipo booleano Password. Cuando se activa dicha propiedad, el contenido del TextField será sustituido por una sucesión de boliches para que no resulte visible tanto cuando es el usuario quien teclea como cuando definimos el contenido mediante código. La activación de la propiedad Password resulta idónea para la introducción de contraseñas, tal y como indica su nombre.
Al igual que ocurre con la propiedad Text, la propiedad Password está disponible en la creación y despliegue de aplicaciones Desktop (macOS, Windows, Linux), así como en Web y móvil nativo iOS. La única particularidad en este sentido es que aquellos navegadores que lo soporten, como puede ser el caso de Safari en macOS, detectarán el control como campo de texto de contraseña ofreciendo la capacidad de guardarla o bien de rellenarla con un preajuste previamente guardado. En el caso de las aplicaciones iOS el comportamiento también será el habitual en las aplicaciones nativas de este tipo, mostrando rápidamente el texto de la tecla pulsada antes de ocultarlo a continuación con el símbolo del boliche.
Aspecto del TextField
Sobre las propiedades relacionadas fundamentalmente con el aspecto que tendrá el texto mostrado por este control, en el apartado Atributos del Panel Inspector de un TextField de escritorio podemos determinar tanto el tipo, como el tamaño y estilo, al igual que sucede también en el uso de dicho control en las aplicaciones iOS; mientras que en el área principal del Inspector de Propiedades podremos cambiar la alineación del texto, el color de texto y también color de fondo (sólo en Desktop, no así en iOS).
En el caso de las aplicaciones Web, todas las cuestiones relativas al estilo del texto vendrán determinadas por la asignación de un Estilo Web definido previamente, y cuya creación y asignación puedes ver en el vídeo que acompaña a esta entrada.
Particularidades por plataforma
El uso de este control en las aplicaciones Desktop también permite configurar otras características de su aspecto, tal y como pueda ser por ejemplo el uso de un borde (no es posible definir su color y/o grosor), el uso de un anillo de enfoque característico para indicar que es el control activo para aceptar las pulsaciones de teclado, y la capacidad ya indicada de aceptar un color de fondo; algo que también es posible en el uso del control en aplicaciones Web, mediante la correspondiente propiedad en la definición de un estilo web.
Limitar texto introducido
Existen varias formas de limitar el texto introducido, ya sea por tipo o por cantidad. La más sencilla es obviamente esta segunda opción, disponible tanto en la implementación del control para las aplicaciones Desktop como Web mediante el uso de la propiedad LimitText.
Aplicar formato al texto introducido
Son muchos los tipos de aplicaciones en los que deseariamos aplicar un formato detemrinado al texto introducido por el usuario, y de hecho en las propiedades del TextField encontraremos la forma de hacerlo, si bien de modos diferentes y con mayor o menor flexibilidad en función de que se trate de una aplicación Desktop, Web o iOS.
Desktop
Por ejemplo, en el uso del TextField con las aplicaciones Desktop (macOS, Windows, Linux) podemos utilizar la propiedad Mask para aplicar un formato determinado a los datos introducidos. En este caso, el formato se aplicará cuando el control pierda el foco. Por ejemplo, la siguiente secuencia aplicada a la propiedad Mask:
###,###.00\ \€
El TextField formateará automáticamente el número: 123456 como
123.456,00 €
Ten en cuenta que si bien en la definición hemos utilizado la notación anglosajona (la coma como separador de miles y el punto como separador de decimales), nuestra aplicación aplicará los ajustes regionales configurados en el equipo sobre el que se ejecute la aplicación. Es decir, lo hará correctamente.
Web
Más que de una aplicación de formato, en este caso podríamos hablar de una combinación entre formato y restricción. Para ello se puede seleccionar cualquiera de las opciones recogidas en el menú desplegable Type bajo el apartado Appearance del Panel Inspector:
- Normal. El WebTextField admitirá y mostrará cualquier texto asignado.
- Password. Como se ha indicado en el apartado anterior, se comportará como un campo de texto para la introducción de contraseñas.
- E-mail Address. El control mostrará un anillo de error (en color rojo) si el texto introducido no corresponde a una dirección de correo; si bien solo diferencia la presencia del signo de arroba (‘@’) y la presencia de un punto (‘.’) en la composición del texto introducido.
- Number. En este caso el control mostrará un anillo de error si su contenido no es exclusivamente numérico. Es similar al ejemplo visto con el uso de Mask para una aplicación de escritorio, salvo que en este caso el control suma unos pequeños elementos para aumentar o reducir su valor numérico en pasos de uno.
- Telephone Number. En principio debería de aceptar un número telefónico como valor, si bien en la práctica (y en el momento de escribir esto) admite cualquier tipo de dato.
- URL. Al igual que en el anterior caso, debería de admitir y mostrar únicamente el contenido correspondiente a una composición válida de URL, si bien en la práctica admite cualquier tipo de contenido de texto.
iOS
En este caso se trata más bien de indicar el tipo de teclado que se mostrará cuando el usuario de la aplicación haga tap sobre el control de texto, pudiendo elegir así el más adecuado para la introducción de valores numéricos, URL, e-mail o texto general, entre algunas de las múltiples opciones disponibles.
Buenas tardes Javier,
Una cosa que he observado con el uso de este tipo de objetos es que cuando contienen caracteres especiales tales como «&» al volcar su contenido a un Label, estos acaban desapareciendo. Te pongo un ejemplo:
Tengo un TexfFIeld que recoge una entrada que al pulsar INTRO paso a un Label que mostrará su contenido:
SFRLabel.Text = “Active SFRs defined in “+ TextField.Text
Cuando introduzco por ejemplo «Home & Garage» me muestra en el Label «Home Garage».
¿A qué se puede deber?
Gracias.
Pues el caracter “&” tiene un significado especial en el contexto de los objetos textuales… Para solucionarlo puedes utilizar, por ejemplo:
Dim t As Text = TextField1.Text.ToText
t = t.ReplaceAll(” & “, ” && “)
Label1.Text = t
Me extrañaría que no estuviese reportado como bug en Feedback.
Saludos,
Javier
Muchas gracias!
Buenas tardes Javier,
¿Hay alguna forma de vincular el estiramiento de un textFiled a otro próximo para que cuando se amplíe la ventana ambos se estiren en proporción?
Imagina que tengo una ventana y dos textFields, uno al lado del otro. EL primero lo bloqueo a la izquierda y el segundo a la derecha. La idea es que cuando se estire la ventana, tanto el lado derecho del primero como el izquierdo del segundo sigan manteniendo la misma distancia de separación.
La verdad es que el diseño de ventanas en Xojo es muy mejorable. ¿Qué opinas? ¿Alguna solución?
Gracias y un abrazo!
La ventana (y ContainerControl) te proporciona el evento necesario (Resizing) para que realices los ajustes correspondientes de los controles. En mis apps los utilizo sin problemas, incluso cuando tengo que reajustar el tamaño y posición de controles en ausencia de otros… como al ocultar alguno de ellos.
saludos!
Muchas gracias!
Buenas días Javier
Su ayuda por favor, estoy usando xojo web 2019 pero no encuentro la forma de hacer que el textfield se solo numérico, ya e puesto en appearance como type numérico pero no hace efecto,
también quiero controlar en otro texto que sea de formato mayusculas.
Gracias
Hola!
Puedes añadir el Evento KeyPressed en ambos casos (por ejemplo). Luego, en el primero de los TextField (numérico), introduce lo siguiente:
me.Text = format(me.Text.val,”######”)
En cuanto al segundo TextField, para forzar que sea todo mayúsculas:
me.Text = me.Text.Uppercase
Si lo deseas, puedes cambiar y en vez de utilizar el evento KeyPressed emplear LostFocus o TextChanged.
Ten en cuenta que cada disparo del evento supone un envío al servidor y pueden afectar cuestiones como la latencia; de ahí que cuantas menos consultas, mejor.
Javier
Gracias Javier.
funciono muy bien
me.Text = format(me.Text.val,”######”),
me.Text = me.Text.Uppercase, pero como seria para aceptar números con decimales