Foco en un textbox?

18/04/2006 - 01:50 por GustavoArriola | Informe spam
Hola a todos!

¿Cómo puedo saber si el foco se encuentra en un cuadro de texto?

La idea es implementar las funciones Copiar, cortar, Pegar y Deshacer para
cualquier cuadro de texto desde el menú Edición de mi aplicación.

Desde ya muchas gracias!
Gustavo Arriola

Preguntas similare

Leer las respuestas

#1 Lucas
18/04/2006 - 04:50 | Informe spam
Para saber si un elemento del formulario tiene el enfoque usas la propiedad
"Focused"

if nombreControl.Focused = true then
'el control tiene el enfoque
end if

Sin embargo, no creo que te sirva para lo que quieres hacer, porque al
presionar el botón "Deshacer" del menú "Edición", harías que el TextBox (o
cualquier elemento del formulario) pierda el foco.

He leído por ahí que el patrón de diseño "Memento" es el que mejor se
acomoda para esa parte del "Deshacer", no estaría de más que le des una
revisada.

Otra forma podría ser guardar en alguna variable el nombre del último
TextBox que tuvo el foco y usar el método Undo, en fin, hay formas.

Espero haberte ayudado. Nos vemos.
Respuesta Responder a este mensaje
#2 Leonardo Azpurua [mvp vb]
19/04/2006 - 17:57 | Informe spam
"GustavoArriola" escribió en el mensaje
news:
Hola a todos!

¿Cómo puedo saber si el foco se encuentra en un cuadro de texto?

La idea es implementar las funciones Copiar, cortar, Pegar y Deshacer para
cualquier cuadro de texto desde el menú Edición de mi aplicación.

Desde ya muchas gracias!



Hola, Gustavo:

Los formularios tienen la propiedad ActiveControl, que te devuelven una
referencia al control activo. Si consultas el valor de ActiveControl despues
de haber pulsado una opcion del menu principal del formulario, sigues
teniendo una referencia al control activo fuera del menu.

El usuario puede deshacer los cambios realizados en un control pulsando
Ctrl-Z o seleccionando "Deshacer" desde el menu contextual que se abre al
pulsar el boton derecho del mouse sobre el control.

Los controles de texto exponen el metodo Undo(), que restablece el contenido
del control al momento de comenzar la edicion:

If TypeOf ActiveControl Is TextBox Then
DirectCast(ActiveControl, TextBox).Undo()
End If

Pero agregar en el menu de un formulario una opcion para deshacer los
cambios efectuados en el control activo puede resultar una exageración: como
norma general, pretender agregar a nuestras aplicaciones todo lo necesario
para suplir la ignorancia del usuario es una pésima decisión de diseño (casi
todo el software monstruoso que se ve por ahi tiene esta intención entre sus
causas aberrantes). Lo ideal es que la opción "Deshacer" del menu de edición
se refiera a todos los cambios realizados desde que comenzó el proceso de
edicion.

El patron "Memento" al que se refiere Lucas en su respuesta se describe en
[GoF 1995] como "Sin violar la encapsulacion, capturar y externalizar el
estado interno de un objeto con el fin de permitir que dichos estados puedan
ser restablecidos en ese objeto posteriormente". Un "memento", entonces,
podria ser una clase que almacena el contenido de los controles al comenzar
la edicion del formulario, y la solucion es tan simple como obtener los
valores de esta clase y volver a colocarlos en los controles.

Salud!
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida