
Etiquetas: Event.CHANGE TextEvent.INPUT focus setSelection
Lo primero que tenemos que hacer para ir formateando el texto mientras el usuario escribe es añadir un listener para el evento change al campo de texto:
Texto_txt.addEventListener(Event.CHANGE,textoDentro);
Es importante que utilicemos el evento Event.CHANGE en lugar del TextEvent.INPUT, ya que el segundo se distribuye antes de que el campo se haya actualizado. Es decir, que si escribimos una "a" en el campo, flash lanza el evento TextEvent.INPUT, actualiza el valor .text del campo y lanza el eveno Event.CHANGE.
Después creamos la función que recoja el evento:
function textoDentro(e:Event):void {
e.target.text = formatear(e.target.text.split(".").join(""));
e.target.setSelection(e.target.text.length, e.target.text.length);
}En esta función hacemos dos cosas. Primero cogemos el texto del campo, le quitamos los puntos y lo mandamos a la función que lo va a formatear:
e.target.text = formatear(e.target.text.split(".").join(""));
Después ponemos el cursor al final del campo para que el usuario pueda seguir escribiendo al final del número:
e.target.setSelection(e.target.text.length, e.target.text.length);
La función que evalúa el número y le pone los puntos es esta:
function formatear(strNumber:String):String {
while (strNumber.substr(0, 1) == "0") {
strNumber = strNumber.substr(1);
}var dollar_array:Array = new Array();
var start:Number;
var end:Number = strNumber.length;
while (end > 0) {
start = Math.max(end - 3, 0);
dollar_array.unshift(strNumber.slice(start, end));
end = start;
}return dollar_array.join(".");
}
Etiquetas: stageFocusRect
Otra linea que se me olvida siempre. Si queremos que no aparezca (en Actionscript 3.0) el rectángulo amarillo que aparece al pulsar la tecla de tabulación, tenemos que poner la siguiente linea:
stage.stageFocusRect = false;

Etiquetas: focus
La manera de poner el foco sobre un campo de texto en Actionscript 3.0 es incluso más sencilla que en Actionscript 2.0.
Basta con utilizar la propiedad stage.focus para poner el foco sobre el campo que queramos. Por ejemplo:
stage.focus = Campo_txt;