Visual Basic Foro
Programación => Visual Basic 6 => Mensaje iniciado por: pedroesca en Junio 30, 2011, 09:29:27 am
-
Buenos días! necesitaría saber si es factible (posible, viable, etc.), generar un procedimiento, rutina y/o función que "recorra" los eventos de un determinado control, y al dispararse dicho evento, se ejecute dicha rutina. Por ejemplo (porque ni yo entendí lo que escribí arriba), quiero efectuar determinada tarea al producirse el "Got_Focus" de los textbox's de cierto formulario, es decir, para no tener que escribir las líneas en cada gotfocus de cada textbox. Se entiende??? espero que si. Saludos.
-
Mm... puedes subclasearlo (que seria medio largo xD) y cuando recibas WM_SETFOCUS ahi ejecutas, pero eso si, no estan TODOS los eventos con el mismo nombre :P
O sino puedes crear array de controles :D que puede ser mas facil y achica el codigo
-
En ese caso, estas asumiendo que tendras el mismo procedimiento en cada control, por ejemplo las acciones que realices en el Gotfocus de cada textbox seran las mismas en todos los textbos. En ese caso:
Opcion 1: Has una matriz de controles, incluso aqui puedes usar condicionales para ciertas variaciones de la funcion.
Opcion 2: Haste un control de usuario donde las acciones del Gotfocus ya se estuvieran realizando, esta forma me gusta mas porque puedes reutilizar el control en otros proyectos.
-
Y falto la manera mas sucia (?), en cada TextBox_GotFocus llamas a un sub xD
-
Gracias a todos ! y si, coincido totalmente con YAcosta, llegué a esa misma conclusión, es mas ya estoy finalizando el "Mini" usercontrol, creo es lo mas acertado para no hacer el "trabajo sucio", pues me he cansado de ello (varios años haciendo eso :( )
-
lo q podrias hacer o x lo menos en .net lo ago asi es crear el evento got focus y ago un addhandler de dicho evento creado donde dentro esta lo q necesito .... recorro los textbox y les agrego a todo
-
en .NET no hace falta addhandler para hacer eso, podes crear una funcion a la cual le podes poner que accedan varios controles a la vez. algo asi:
Private Sub ColorFocoTextbox(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtID.LostFocus, txtNombre.LostFocus, txtCarpetaEntrada.LostFocus, txtCarpetaSalida.LostFocus, txtCadena.LostFocus
sender.BackColor = Color.White
End Sub
este ejemplo pone el backcolor en blanco cuando todos esos controles ejecutan el evento LostFocus, creo que la mejor solucion y mas simple en VB6, es una matrix de controles, como ya te dijeron.
saludos.
-
si seba tienes razon pero es viable las dos aunq la q pusiste es mas simple y da lo mismo ! gracias por el aporte
-
La manera mas simple es poner un HOOK e interceptar el cambio de foco globalmente y desde ahi ver que clase de control es y proceder. Arme un ejemplo que hacia justamente lo que piden pero lamentablemente no esta en mi pagina y no se si lo puse en algun lado... me parece que se lo di a Ivo ... buenla cuestion es que no tengo ni VB6 en este momento pero esa opcion son 20 lineas maximo.
-
Gracias Cobein, pero no tengo fucking idea de como hacer un Hook, por el momento lo resolví con un user control.