Como Saber Que Objeto Tiene El Enfoque


Ir a la página 1, 2  Siguiente

Objetivo: Como Saber Que Objeto Tiene El Enfoque
Hola compañeros, me gustaría saber si existe una función que me permita saber que objeto tiene el enfoque.


Si alguno conoce, le agradezco de antemano.

Perfil MP  
Objetivo: Re: Como Saber Que Objeto Tiene El Enfoque
No, no existe una función que haga eso. Ver el mensaje de ahtonio, más abajo.

Se me ocurre que durante el evento GotFocus de un control podrías establecer su propiedad Tag a True y durante el evento LostFocus a False. Así para saber si un control tiene el enfoque sólo deberías mirar el valor de su propiedad Tag (seguramente sería necesario iterar la colección Controls para ello).

Pero es altamente probable que si expones claramente el problema podamos encontrar una solución más eficiente.

última edición por fabianfv el Jueves, 22 Julio 2010, 17:28; editado 1 vez
Ayortano
Objetivo: Re: Como Saber Que Objeto Tiene El Enfoque
Lo que se me ocurre es declarar una variable global de clase, y cuando un control pierda o recupere el foco, la variable sea igual a este control. Me explico:

Private foco As Variant 'Declaramos la variable

Public Sub cualquiera_gotfocus()
foco = cualquiera
End

Public Sub listbox1_gotfocus()
foco = listbox1
End


Claro que es sólo un ejemplo, puedes hacer otras cosas.

Espero haber ayudado, saludos!

Objetivo: Re: Como Saber Que Objeto Tiene El Enfoque
Tomando la mejora de Ayortano, le haría un par de modificaciones al código:
PRIVATE ControlWithFocus AS Object

Public Sub Control_GotFocus()
ControlWithFocus = Null
End

Public Sub Control_GotFocus()
ControlWithFocus = LAST
End


Donde "Control" podría ser cualquier control (TextBox, ListBox, etc) o bien un grupo de controles (el valor de la propiedad Group de varios controles.

Objetivo: Re: Como Saber Que Objeto Tiene El Enfoque
Buena aproximación, fabián, pero me temo que LAST devolverá la referencia al último objeto que haya generado un evento, incluidos los objetos generados por el programador, tales como sockets, files, etc.

Así que bajo mi punto de vista, esto puede acarrear problemas...

http://gambasdoc.org/help/lang/last?es


Saludos

Perfil MP  
Objetivo: Re: Como Saber Que Objeto Tiene El Enfoque
Citar:

me temo que LAST devolverá la referencia al último objeto que haya generado un evento, incluidos los objetos generados por el programador, tales como sockets, files, etc.

Así que bajo mi punto de vista, esto puede acarrear problemas...


Pero estamos hablando del uso de LAST dentro de manejadores de evento, por lo que un manejador de eventos para un control o grupo de controles sólo se ejecutará cuando ese control o alguno de los controles agrupados hayan generado el evento, y en consecuencia dentro de ese manejador de eventos LAST únicamente puede devolver una referencia al control al que está asociado o, en el caso de tratarse de un grupo de controles, a uno de los controles agrupados.

Amplío el ejemplo:

PRIVATE ControlWithFocus AS Object
PRIVATE txtNombre AS TextBox

PUBLIC SUB txtNombre_GotFocus()
ControlWithFocus = LAST
End

'En este caso se trata de controles agrupados (su propiedad Group tiene el mismo valor: Group=DatosPersona)

PUBLIC SUB DatosPersona_GotFocus()
ControlWithFocus = LAST
End

última edición por fabianfv el Lunes, 19 Julio 2010, 18:18; editado 1 vez
Objetivo: Re: Como Saber Que Objeto Tiene El Enfoque
Comprendo. Es evidente lo que dices, no había pensado mucho en ello. Otra cuestión es si es necesario comprobar la pérdida de foco, ya que si un control lo pierde es porque otro lo recibe (aunque sea el propio formulario o un contenedor). Entonces creo que bastaría con el manejador _GotFocus().

De todos modos ahora mismo no se me ocurre ninguna razón para que sea necesario conocer qué control tiene el foco...

Quizás aristicol nos pueda aclarar su finalidad.

Saludos

Perfil MP  
Objetivo: Re: Como Saber Que Objeto Tiene El Enfoque
Es cierto, el manejador del evento GotFocus es todo lo que se necesita. Modifico los ejemplos para reflejar esto.

Objetivo: Re: Como Saber Que Objeto Tiene El Enfoque
Hola. Si lo unico que necesitas es saber el control activo, mira la documentacion de Gambas2, el objeto Application tiene una propiedad activecontrol que devuelve una referencia al control activo:

Application (gb.qt)
Global information about application.

Symbols
This class reimplements Application in gb. Static properties
Args Daemon Dir Env Handle Id Name Path Return Title Version
--------------------------------------------------------------------------------
This class is static.

--------------------------------------------------------------------------------
Static properties
ActiveControl ActiveWindow Busy Embedder Font MainWindow Theme ToolTip

de este modo, siempre puedes

Public sub mi_proc()
DIM hctl AS Control
hctl = Application.ActiveControl
DEBUG hctl.Name ' Mostrar el nombre del control por consola en tiempo de diseño
...
'Operaciones con el control activo
...
End





Espero haber sido de ayuda.

Perfil MP  
Objetivo: Re: Como Saber Que Objeto Tiene El Enfoque
Gracias ahtonio, a mí me sirve de mucho porque no recordaba en absoluto que la clase Appication tuviera esa propiedad.

Saludos.

Ir a la página 1, 2  Siguiente

Página 1 de 2


  
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario

   

Está utilizando la versión (Lo-Fi). Para ver la versión completa del foro, haga clic aquí.

Powered by Icy Phoenix based on phpBB
Design by DiDiDaDo

Página generada en:: 0.1613s (PHP: -47% SQL: 147%)
Consultas SQL: 31 - Debug off - GZIP Activado