Acceder a un control del formulario padre desde un hijo

13/06/2005 - 20:54 por Luis Matamoros | Informe spam
Hola a todos, espero me puedan ayudar.

Tengon un formulario padre, desde este cargo varios
formularios hijos, en el form. padre tengo una etiqueta
que me indica que formulario hijo tengo abierto, cuando
cierre el formulario hijo quiero qu la etiqueta quede
limpia. En el evento closing del form hijo tengo lo
siguiente:

Dim f as New frmPadre
f.etiqueta.tex = ""

pero no me funciona, la eiqueta siempre tiene la cadena
que indica que form hijo esta abierto, que puedo hacer_

Preguntas similare

Leer las respuestas

#1 Tristan
13/06/2005 - 22:10 | Informe spam
Antes de responder lo que debes hacer, me gustaría que pienses sobre lo que
estás escribiendo.

Dim f as New frmPadre
f.etiqueta.tex = ""



La primera sentencia crea una instancia nueva de la clase frmPadre. Un
formulario de la misma clase que el padre, pero que no es el padre. De
hecho, ni siquiera es visible, puesto que nunca has hecho f.Show. NO ES la
instancia del padre que se está visualizando.

Por lo tanto, la segunda sentencia no sirve para modificar nada del padre.

Lo que necesitas no es una nueva instancia, sino EXACTAMENTE la instancia
del padre.

Dando por hecho que te refieres a padre MDI, lo que debes hacer es:

Dim f as FrmPadre = me.MdiParent
f.etiqueta.tex = ""

O más correctamente:

Dim f as FrmPadre = DirectCast(me.MdiParent, FrmPadre)
f.etiqueta.tex = ""

Por cierto, la clase Form ya dispone de una propiedad, que te permite saber
desde el padre cual es el hijo MDI activo:

MsgBox(Me.ActiveMdiChild.Name)


Juan Carlos Badiola
MVP - C#
Respuesta Responder a este mensaje
#2 Diego Cofré
16/06/2005 - 21:46 | Informe spam
Luis:
El problema en este caso es que no estas utilizando el mismo objeto frmPadre
que instanció al hijo, sino que cuando haces:
Dim f as New frmPadre
...en realidad estas creando otra instancia del padre, por eso el cambio que
haces no afecta a la instancia que estas viendo.
Para lograr lo que vos queres hacer, necesitas en el hijo tener una
referencia a su padre, lo cual podes lograr llamando al metodo showdialog
del padre y en el parametro owner pasar la referencia al padre. Asi desde el
hijo, podes consultar la propiedad owner y obtendras una referencia al
formulario que lo mostro.
Te mando un codigo donde un formulario llamado Form1 llama a otro llamado
Form2.

En form1 agrega un label que se llame label2, un boton que se llame Button1,
y este codigo:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click

Dim f As New Form2

Me.Label2.Text = "Mostrando Form2"

f.ShowDialog(Me)

End Sub



Y en form2:

Private Sub Form2_Closing(ByVal sender As Object, ByVal e As
System.ComponentModel.CancelEventArgs) Handles MyBase.Closing

CType(Me.Owner, Form1).Label2.Text = "Se cerró el Form2..."

End Sub



Saludos, espero que te sirva
Diego
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida