• Martes 21 de Enero de 2020, 06:46

Autor Tema:  Accesar a controles de un form hijo  (Leído 1766 veces)

lalo_soft

  • Miembro MUY activo
  • ***
  • Mensajes: 469
    • Ver Perfil
Accesar a controles de un form hijo
« en: Jueves 3 de Julio de 2008, 06:58 »
0
Hice una app tipo MDI , pero no logro que el form padre tenga aceso a los contoles (TreeView en este caso) del form hijo.
Alguien del foro sabe como hacerlo.

Mollense

  • Miembro de PLATA
  • *****
  • Mensajes: 1755
  • Nacionalidad: ar
    • Ver Perfil
    • http://solocodigo.com/
Re: Accesar a controles de un form hijo
« Respuesta #1 en: Jueves 3 de Julio de 2008, 16:55 »
0
Cita de: "lalo_soft"
Hice una app tipo MDI , pero no logro que el form padre tenga aceso a los contoles (TreeView en este caso) del form hijo.
Alguien del foro sabe como hacerlo.
¿Tenés la referencia a ese form? Si es así y no podés acceder seguramente se debe a qye el TreeView está declarado como "private", algo feo que podrías hacer es declararlo como público pero eso es horrible, yo te sugiero 1 de estas tres opciones:
1) Cambiá la declaración del TreeView de "private" a "public", sin duda la opción mas fácil, pero la peor.
En el hijo:
Código: Text
  1. public System.Windows.Forms.TreeView miTreeView;
  2.  
Desde el padre:
Código: Text
  1. formulario.miTreeView.Nodes.Add("Nuevo Nodo");
  2.  

2)Crear métodos públicos en el formulario hijo y que estos sean quienes manipulan al TreeView

3) En el formulario hijo implementá una nueva propiedad que te permita el acceso al TreeView:
En el hijo:
Código: Text
  1. public TreeView MiTreeView
  2.         {
  3.             get
  4.             {
  5.                 return miTreeView;
  6.             }
  7.         }
  8.  
Desde el padre:
Código: Text
  1. formulario.MiTreeView.Nodes.Add("Nuevo Nodo");
  2.  

Voto por la tercera.

Un saludo
"Los que renuncian son más numerosos que los que fracasan" H.F.
"No se cómo sería la III Guerra Mundial, pero la cuarta sería con piedras" A.E.
"Quién no fía no es de fiar..."


...no te quedes mirando.

lalo_soft

  • Miembro MUY activo
  • ***
  • Mensajes: 469
    • Ver Perfil
Re: Accesar a controles de un form hijo
« Respuesta #2 en: Jueves 3 de Julio de 2008, 22:42 »
0
Código: Text
  1.  
  2. foreach(Form childForm in MdiChildren)
  3.  {
  4.    if(childForm.Text == "Admin")
  5.    {
  6.      childForm.Activate();
  7.      foreach(Control control in this.ActiveMdiChild.Controls)
  8.      {
  9.        if(control is TreeView)
  10.           {
  11.             TreeView tree = (TreeView)control;
  12.              saveTree(tree,saveProyect.FileName);
  13.              break;
  14.           }
  15.     }
  16.   }
  17.  }  
  18.  
  19.  

Lo solucione de esta mejor forma y no necesita cambiar ningun control de formChild  a Public, Gracias de todos modos Mollense  :good:

Mollense

  • Miembro de PLATA
  • *****
  • Mensajes: 1755
  • Nacionalidad: ar
    • Ver Perfil
    • http://solocodigo.com/
Re: Accesar a controles de un form hijo
« Respuesta #3 en: Jueves 3 de Julio de 2008, 22:51 »
0
En las dos últimas variantes que te dí tampoco necesitas cambiar ningún control a "public" y no necesitas recorrer todos los controles ni depender del Text del formulario.
Sigo prefiriendo agregar una propiedad al formulario Hijo, porque me parece la manera mas limpia de hacerlo:

En el hijo:
Código: Text
  1. public TreeView MiTreeView
  2. {
  3.     get
  4.     {
  5.         return miTreeView;
  6.     }
  7. }
  8.  
Y en el padre:
Código: Text
  1. saveTree(miFormulario.MiTreeView,saveProyect.FileName);
  2.  

Saludos
"Los que renuncian son más numerosos que los que fracasan" H.F.
"No se cómo sería la III Guerra Mundial, pero la cuarta sería con piedras" A.E.
"Quién no fía no es de fiar..."


...no te quedes mirando.

lalo_soft

  • Miembro MUY activo
  • ***
  • Mensajes: 469
    • Ver Perfil
Re: Accesar a controles de un form hijo
« Respuesta #4 en: Jueves 3 de Julio de 2008, 23:39 »
0
Mmmmm! pero  tendrias que crear una nueva instancia del form hijo, y con ello no tendras aceso al control que esta en el form hijo ya anteriormente desplegado, o me equivoco?

Mollense

  • Miembro de PLATA
  • *****
  • Mensajes: 1755
  • Nacionalidad: ar
    • Ver Perfil
    • http://solocodigo.com/
Re: Accesar a controles de un form hijo
« Respuesta #5 en: Viernes 4 de Julio de 2008, 00:05 »
0
Cita de: "lalo_soft"
Mmmmm! pero  tendrias que crear una nueva instancia del form hijo, y con ello no tendras aceso al control que esta en el form hijo ya anteriormente desplegado, o me equivoco?
No, el tema es no perderla a la hora de crearla por primera vez ;)
"Los que renuncian son más numerosos que los que fracasan" H.F.
"No se cómo sería la III Guerra Mundial, pero la cuarta sería con piedras" A.E.
"Quién no fía no es de fiar..."


...no te quedes mirando.

lalo_soft

  • Miembro MUY activo
  • ***
  • Mensajes: 469
    • Ver Perfil
Re: Accesar a controles de un form hijo
« Respuesta #6 en: Viernes 4 de Julio de 2008, 00:27 »
0
Cita de: "Mollense"
Cita de: "lalo_soft"
Mmmmm! pero  tendrias que crear una nueva instancia del form hijo, y con ello no tendras aceso al control que esta en el form hijo ya anteriormente desplegado, o me equivoco?
No, el tema es no perderla a la hora de crearla por primera vez ;)

Osea, que tendria que tener una especie de array con las referencias de los form hijos que se van creando en tiempo de ejecucion? como se ase tal array :mellow:

Mollense

  • Miembro de PLATA
  • *****
  • Mensajes: 1755
  • Nacionalidad: ar
    • Ver Perfil
    • http://solocodigo.com/
Re: Accesar a controles de un form hijo
« Respuesta #7 en: Viernes 4 de Julio de 2008, 06:10 »
0
Cita de: "lalo_soft"
Cita de: "Mollense"
Cita de: "lalo_soft"
Mmmmm! pero  tendrias que crear una nueva instancia del form hijo, y con ello no tendras aceso al control que esta en el form hijo ya anteriormente desplegado, o me equivoco?
No, el tema es no perderla a la hora de crearla por primera vez ;)

Osea, que tendria que tener una especie de array con las referencias de los form hijos que se van creando en tiempo de ejecucion? como se ase tal array :mellow:
Y bueno, eso depende de cada sistema, no se como estés creando tus formularios. Una forma genérica de manejarlos sería por medio de un diccionario:
Código: Text
  1. public partial class FormularioPadre : Form
  2.     {
  3.         [b]private Dictionary<string, FormHijo> formularios = new Dictionary<string, FormHijo>();[/b]
  4.  
donde FormHijo debería ser un Form que implemente la propiedad que te dije antes.
Cada vez que crees un formulario hijo lo hacés de esta forma:
Código: Text
  1. formularios.Add("NombreDelForm",new FormHijo()); //Si todos los formularios hijos son iguales, si no lo son, cada formulario debería heredar de FormHijo, heredando de esta forma la propiedad "MiTreeView"
  2.             formularios["NombreDelForm"].MdiParent = this;
  3.             formularios["NombreDelForm"].Show();
  4.  

Cuando quieras acceder a alguno:
Código: Text
  1. formularios["NombreDelForm"].MiTreeView.Nodes.Add("Nuevo Nodo");
  2.  

No se si me explico
"Los que renuncian son más numerosos que los que fracasan" H.F.
"No se cómo sería la III Guerra Mundial, pero la cuarta sería con piedras" A.E.
"Quién no fía no es de fiar..."


...no te quedes mirando.

lalo_soft

  • Miembro MUY activo
  • ***
  • Mensajes: 469
    • Ver Perfil
Re: Accesar a controles de un form hijo
« Respuesta #8 en: Domingo 6 de Julio de 2008, 16:57 »
0
Si,gracias entendi el concepto  :good: