Solo textfield modificado

Hola foro! necesito de su ayuda, quien me puede orientar o dar un ejemplo, tengo varios textfield, donde tengo valores numericos, por ejemplo en uno la cotizacin del dolar, pesos , fecha ,etc y quiero que en un label por ejemplo me muestre el nombre del textfiel que solo fue modificado, gracias!!!

Aadir a la ventana :

  • numbreDeSucias As Integer
  • sucias As String

Sub enSucia(Texto as TextField) if not esSucia(Texto) then sucias = sucias + " " + str(Texto.Handle) numbreDeSucias = numbreDeSucias + 1 Label1.Text = str(numbreDeSucias) // Para probar end if End Sub

Function esSucia(Texto as TextField) As Boolean if instr(sucias, str(Texto.Handle)) > 0 then Return True else Return False end if End Function

Agregar a cada TextField evento TextChange :

Sub TextChange() ensucia(me) End Sub

Slo si tienes que confiar slo algunos de TextFields, busque el nombre en enSucia contar los interesados. Por ejemplo :

Sub enSucia(Texto as TextField) if not esSucia(Texto) and instr(Texto.Name, "Text") > 0 then sucias = sucias + " " + str(Texto.Handle) numbreDeSucias = numbreDeSucias + 1 Label1.Text = str(numbreDeSucias) end if End Sub

Slo los TextField con “Text” en su nombre ser contado.

Yo haba programado los ejemplos anteriores demasiado tarde en la noche. Aqu es mucho ms simple.

En el evento TextChange de cada TextField :

Sub TextChange() if instr(TextArea1.Text, me.Name) = 0 then TextArea1.Text = TextArea1.Text + me.name+EndOfLine end if End Sub

Hola Mike!

Bienvenido a “Programacin Orientada a Objetos 101” :wink:

Existen mltiples soluciones que te pueden sacar del paso muchas, muchas. Ahora bien, la belleza de la programacin orientada a objetos radica en que puedas reutilizar el cdigo reduciendo al mximo las posibles dependencias. Es decir, que en vez de picar cdigo que te saca del paso cuando lo aplicas en un proyecto, seas capaz de crear clases o jerarquas de clases que puedas utilizar sin ms en todos aquellos proyectos que las requieran.

Y ahora, al grano:

  1. Te recomiendo que crees una nueva clase (por ejemplo MyTextField) indicando en el Inspector como “Super” el control TextField
  2. A continuacin, selecciona la recin creada subclase y aade una propiedad compartida (Shared Property) y asigna el nombre “LabelToNotify” indicando que su tipo es una “Label”.
  3. Aade un nuevo Event Handler (manejado de evento) TextChange a la clase que has creado e incluye el siguiente cdigo en dicho evento:

if LabelToNotify <> nil then LabelToNotify.Text = me.Name TextChange

  1. Como nuestra clase consume dicho eventodebemos definir uno nuevo, empleando la misma signatura, de modo que est disponible para las instancias creadas a partir de dicha clase. Por tanto, con nuestra nueva clase seleccionada en el Navegador de Proyecto, aade una nueva definicin de evento (Event Definition) y limtate a sealar como nombre “TextChange”

Ahora cambia el campo Super de todos tus TextField en la ventana donde se encuentren de modo que pase a ser “MyTextField”

Por ltimo, en el evento Open de la ventana en cuestin, aade la siguiente lnea:

  MyTextField.LabelToNotify = Label1

Teniendo en cuenta que has de cambiar “Label1” por el nombre de la instancia de la etiqueta (control de tipo Label) en el que desees mostrar el nombre del control cuyos contenidos se han visto modificados.

Advierte que estamos utilizando el nombre de nuestra clase (MyTextField) y no de una instancia concreta. Esto es as porque como hemos creado una propiedad compartida (es decir, de la clase) sta estar disponible para todas las instancias creadas a partir de dicha clase :wink:

Puedes descargar un proyecto de ejemplo desde este enlace.

Es un buen ejemplo para el prximo tutorial en vdeo. :slight_smile:

Javier Rodrguez
Evangelista Xojo en Espaol
Autor del libro “Programacin Multiplataforma Xojo

Hola Javier y Michel le agradezco a los dos por sus aportes, lo voy a probar! gracias.