Referencia a un control de form

20/03/2009 - 16:38 por Heriberto | Informe spam
Hola como estan.

En un Form de windows necesito hacer lo siguiente, a lo mejor es algo
sencillo pero no se mucho:

Es un form donde se leen muchisimos datos que el usuario va digitando en un
orden determinado. El usuario puede ir salvando los datos digitados y sale
con frecuencia del form para luego volver a continuar con los datos
faltantes.
Me piden que el sistema guarde la ubicacion (el control) donde quedo el
usuario para que al volver a abrir el form se posicione en ese mismo
control.

No logro como guardar una referencia con la propiedad ActiveControl ya que
si cierran el form, esa referencia se pierde. Ademas que cuando hay varios
containers, tabControls, etc. ActiveControl no funciona bien.

Yo lo veo como que debo guardar es algo asi como la "ruta" del control:
Ejemplo. Container1.tabPage1.textBox1

Como podria hacerlo ? y tambien como podria teniendo esa "ruta" encontrar
el correspondiente control cuando vuelva a entrar al form?

Preguntas similare

Leer las respuestas

#1 Albert
20/03/2009 - 18:07 | Informe spam
Hola,

Al salir guardas el nombre del control activo en la configuración, y al cargar le das el foco:

private void Form1_Load(object sender, EventArgs e)
{
String ctl=RecuperaNombreControl(this);
if(ctl != null)
{
this.Controls[ctl].Select();
}
}

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
GuardarNombreControl(this, this.ActiveControl.Name);
}

En este ejemplo tienes dos funciones, la de RecuperarNombreControl que se supone te devuelve un String
con el nombre del control del formulario Form1 (this).
La otra GuardarNombreControl.

Tienes diversas formas de guardar estos valores, en registro, con el ConfigurationManager, en base de datos, etc.

Saludos,

Albert

Hola como estan.

En un Form de windows necesito hacer lo siguiente, a lo mejor es algo
sencillo pero no se mucho:

Es un form donde se leen muchisimos datos que el usuario va digitando en un
orden determinado. El usuario puede ir salvando los datos digitados y sale
con frecuencia del form para luego volver a continuar con los datos
faltantes.
Me piden que el sistema guarde la ubicacion (el control) donde quedo el
usuario para que al volver a abrir el form se posicione en ese mismo
control.

No logro como guardar una referencia con la propiedad ActiveControl ya que
si cierran el form, esa referencia se pierde. Ademas que cuando hay varios
containers, tabControls, etc. ActiveControl no funciona bien.

Yo lo veo como que debo guardar es algo asi como la "ruta" del control:
Ejemplo. Container1.tabPage1.textBox1

Como podria hacerlo ? y tambien como podria teniendo esa "ruta" encontrar
el correspondiente control cuando vuelva a entrar al form?




Respuesta Responder a este mensaje
#2 Heriberto
20/03/2009 - 20:21 | Informe spam
Traté de hacerlo asi pero si tengo por ejemplo un textbox, como dije, dentro
de un panel, de un SplitPanel, de un groupbox, o tabControl, etc. etc. la
propiedad ActiveControl no me devuelve correctamente el control textbox.


"Albert" escribió en el mensaje
news:
Hola,

Al salir guardas el nombre del control activo en la configuración, y al
cargar le das el foco:

private void Form1_Load(object sender, EventArgs e)
{
String ctl=RecuperaNombreControl(this);
if(ctl != null)
{
this.Controls[ctl].Select();
}
}

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
GuardarNombreControl(this, this.ActiveControl.Name);
}

En este ejemplo tienes dos funciones, la de RecuperarNombreControl que se
supone te devuelve un String
con el nombre del control del formulario Form1 (this).
La otra GuardarNombreControl.

Tienes diversas formas de guardar estos valores, en registro, con el
ConfigurationManager, en base de datos, etc.

Saludos,

Albert

Hola como estan.

En un Form de windows necesito hacer lo siguiente, a lo mejor es algo
sencillo pero no se mucho:

Es un form donde se leen muchisimos datos que el usuario va digitando en
un
orden determinado. El usuario puede ir salvando los datos digitados y
sale
con frecuencia del form para luego volver a continuar con los datos
faltantes.
Me piden que el sistema guarde la ubicacion (el control) donde quedo el
usuario para que al volver a abrir el form se posicione en ese mismo
control.

No logro como guardar una referencia con la propiedad ActiveControl ya que
si cierran el form, esa referencia se pierde. Ademas que cuando hay
varios
containers, tabControls, etc. ActiveControl no funciona bien.

Yo lo veo como que debo guardar es algo asi como la "ruta" del control:
Ejemplo. Container1.tabPage1.textBox1

Como podria hacerlo ? y tambien como podria teniendo esa "ruta" encontrar
el correspondiente control cuando vuelva a entrar al form?







Respuesta Responder a este mensaje
#3 RFOG
20/03/2009 - 21:03 | Informe spam
Eso es una "feature" del NET, aunque yo lo llamo de otra forma, je je.
Existe un árbol de controles, y el control seleccionado a su vez contiene
un control seleccionado etc...

Quizás la solución sea más sencilla que todo eso: ¿Has probado a cerrarlo
y abrirlo en lugar de crearlo y destruirlo? Con Hide() y con Show().

Otra forma que puedes probar (y no sé si funcionará o no), es obtener el
control que tiene el foco de forma recursiva, es decir, ir recorriendo los
controles y luego los subcontroles e ir mirando cuales de ellos tienen la
propiedad Focused activada.



On Fri, 20 Mar 2009 20:21:20 +0100, Heriberto <herib> wrote:

Traté de hacerlo asi pero si tengo por ejemplo un textbox, como dije,
dentro
de un panel, de un SplitPanel, de un groupbox, o tabControl, etc. etc.
la
propiedad ActiveControl no me devuelve correctamente el control textbox.


"Albert" escribió en el mensaje
news:
Hola,

Al salir guardas el nombre del control activo en la configuración, y al
cargar le das el foco:

private void Form1_Load(object sender, EventArgs e)
{
String ctl=RecuperaNombreControl(this);
if(ctl != null)
{
this.Controls[ctl].Select();
}
}

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
GuardarNombreControl(this, this.ActiveControl.Name);
}

En este ejemplo tienes dos funciones, la de RecuperarNombreControl que
se
supone te devuelve un String
con el nombre del control del formulario Form1 (this).
La otra GuardarNombreControl.

Tienes diversas formas de guardar estos valores, en registro, con el
ConfigurationManager, en base de datos, etc.

Saludos,

Albert





<snip>










Microsoft Visual C++ MVP
==Mi blog sobre programación: http://geeks.ms/blogs/rfog
Momentos Leves: http://momentosleves.blogspot.com/
Cosas mías: http://rfog.blogsome.com/
Libros, ciencia ficción y desarrollo
La mayor rémora de la vida es la espera del mañana y la pérdida del día de
hoy.
Respuesta Responder a este mensaje
#4 Heriberto
20/03/2009 - 21:35 | Informe spam

Quizás la solución sea más sencilla que todo eso: ¿Has probado a cerrarlo
y abrirlo en lugar de crearlo y destruirlo? Con Hide() y con Show().




Entiendo. Ya veré si los convenzo de hacerlo así aunque ya me habian
adelantado que debería funcionar aún cuando cierren la aplicacion y la
vuelvan a cargar.


Otra forma que puedes probar (y no sé si funcionará o no), es obtener el
control que tiene el foco de forma recursiva, es decir, ir recorriendo los
controles y luego los subcontroles e ir mirando cuales de ellos tienen la
propiedad Focused activada.





Bueno, lo tomaré en cuenta.

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