Cómo indicar que hacer en un keyup a todos los objetos de un formulario.

21/02/2006 - 16:20 por José Luis | Informe spam
Hola a todos,

estoy creando una aplciación para Pocket PC y tengo un pequeño problema que
espero que alguien me pueda ayudar a solucionar. El problema es el
siguiente:

En algunos formularios quiero que al pulsar el usuario una tecla se realice
el código de una función. Esto lo se hacer perfectamente indicando en cada
Keyup de cada objeto que vaya a realizar esa función. La cuestión es que
quisiera saber si hay alguna forma de automatizar esto. Es decir que al
crear el formulario todos los objetos del formulario en su método Keyup
tengo la llamada a una función.

¿Alguien sabe si esto se puede hacer y cómo?

Muchas gracias por anticipado.

Un saludo,
José Luis.
 

Leer las respuestas

#1 Luis Miguel Blanco
21/02/2006 - 23:35 | Informe spam
Hola José Luis

Una forma de resolver este problema que tienes pasaría por crear un método
que actúe como manipulador del evento que necesitas para múltiples controles,
veámoslo con un ejemplo:

Supongamos que en un formulario añadimos dos TextBox, y queremos que al
producirse el evento KeyUp para ambos controles, se ejecute el mismo código,
en tu caso que llame a otro método, pero evitando, si he entendido bien,
tener que codificar el método manipulador del evento KeyUp para cada control
del formulario que queremos que se comporte de esta manera. En este caso
podemos resolverlo utilizando al final del método manipulador la palabra
clave Handles, indicando todos los controles-evento que van a producir la
ejecución de este método.

'//////////////////////////////////////////////
Private Sub CajaTexto(ByVal sender As Object, _
ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyUp,
TextBox2.KeyUp

Me.PonerHora()

End Sub

Private Sub PonerHora()
Dim Hora As DateTime = Date.Now
Me.Text = Hora.ToString("hh:mm:ss")
End Sub
'//////////////////////////////////////////////

Como puedes comprobar, en el método CajaTexto, añadimos con Handles al final
de su declaración los nombres de control.evento que asociamos a este método,
el cuál será ejecutado cuando tales controles produzcan el evento; esto hará
que se ejecute a su vez el otro método, PonerHora()

Otra técnica, esta más flexible en determinados contextos, consiste en
asociar el evento con su método manejador en tiempo de diseño, mediante la
instrucción AddHandler, veamos un ejemplo de este caso:

'//////////////////////////////////////////////
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs)
Handles MyBase.Load

AddHandler TextBox1.KeyUp, AddressOf CajaTextoTeclaPulsada
AddHandler TextBox2.KeyUp, AddressOf CajaTextoTeclaPulsada

End Sub

Private Sub CajaTextoTeclaPulsada(ByVal sender As Object, _
ByVal e As System.Windows.Forms.KeyEventArgs)

Me.PonerHora()

End Sub

Private Sub PonerHora()
Dim Hora As DateTime = Date.Now
Me.Text = Hora.ToString("hh:mm:ss")
End Sub
'//////////////////////////////////////////////

En esta situación, al cargar el formulario, asociamos el evento KeyUp de los
controles TextBox con el método CajaTextoTeclaPulsada, de forma que cuando
los controles "disparen" el evento, se ejecutará CajaTextoTeclaPulsada. Con
AddressOf, indicamos la dirección de entrada a la ejecución del método en el
momento de asociar el evento con su manejador correspondiente.

Esta última técnica tiene la ventaja de que podríamos en tiempo de
ejecución, asociar y separar dinámicamente el evento del control con
diferentes métodos manejadores, de forma que en distintas situaciones del
flujo de ejecución de la aplicación, podríamos ejecutar diferentes métodos
manipuladores para el mismo evento de los controles.

Espero que te sirva para solucionar tu problema.

Un saludo
Luis Miguel Blanco
http://www.dotnetmania.com


"José Luis" wrote:

Hola a todos,

estoy creando una aplciación para Pocket PC y tengo un pequeño problema que
espero que alguien me pueda ayudar a solucionar. El problema es el
siguiente:

En algunos formularios quiero que al pulsar el usuario una tecla se realice
el código de una función. Esto lo se hacer perfectamente indicando en cada
Keyup de cada objeto que vaya a realizar esa función. La cuestión es que
quisiera saber si hay alguna forma de automatizar esto. Es decir que al
crear el formulario todos los objetos del formulario en su método Keyup
tengo la llamada a una función.

¿Alguien sabe si esto se puede hacer y cómo?

Muchas gracias por anticipado.

Un saludo,
José Luis.



Preguntas similares