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”
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:
- Te recomiendo que crees una nueva clase (por ejemplo MyTextField) indicando en el Inspector como “Super” el control TextField
- 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”.
- 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
- 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
Puedes descargar un proyecto de ejemplo desde este enlace.
Es un buen ejemplo para el prximo tutorial en vdeo.
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.