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.
Como Saber Que Objeto Tiene El Enfoque
Subject: 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.
Last edited by fabianfv on Thursday, 22 July 2010, 17:28; edited 1 time in total
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.
Last edited by fabianfv on Thursday, 22 July 2010, 17:28; edited 1 time in total
Subject: 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:
Claro que es sólo un ejemplo, puedes hacer otras cosas.
Espero haber ayudado, saludos!
Claro que es sólo un ejemplo, puedes hacer otras cosas.
Espero haber ayudado, saludos!
Subject: Re: Como Saber Que Objeto Tiene El Enfoque
Tomando la mejora de Ayortano, le haría un par de modificaciones al código:
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.
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.
Subject: 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
Así que bajo mi punto de vista, esto puede acarrear problemas...
http://gambasdoc.org/help/lang/last?es
Saludos
Subject: Re: Como Saber Que Objeto Tiene El Enfoque
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:
Last edited by fabianfv on Monday, 19 July 2010, 18:18; edited 1 time in total
Citar:
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:
Last edited by fabianfv on Monday, 19 July 2010, 18:18; edited 1 time in total
Subject: 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
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
Subject: 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.
Subject: 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.
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.
Subject: 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.
Saludos.
Page 1 of 2
You cannot post new topicsYou cannot reply to topics
You cannot edit your posts
You cannot delete your posts
You cannot vote in polls
You cannot attach files
You can download files
You cannot post calendar events
This is a "Lo-Fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by Icy Phoenix based on phpBB
Design by DiDiDaDo
Generation Time: 0.107s (PHP: -25% SQL: 125%)
SQL queries: 24 - Debug Off - GZIP Enabled