Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Paso de variables entre formularios mdi hijos

345 views
Skip to first unread message

kirikoro

unread,
Jan 15, 2010, 6:44:01 PM1/15/10
to
Buenas, estoy iniciandome con esto del visual.net y tengo un pequeño
problema, tengo dos formulario mdi hijos dentro de otro que es el padre y
quiero que desde uno, pueda pasar datos ha el otro hijo, hago por ejemplo la
instruccion:
/
form2(hijo)

form3(hijo).txtNombre.text="Probando"

/
pero estoy no hace absolutamente nada, no hace lo que se le pide y no pone
error alguno, si esto mismo lo hago entre dos formularios no MDI si que
funciona, pero siendo MDIs no, agradeceria enormemente la ayuda.

Gracias y saludos!

SoftJaén

unread,
Jan 16, 2010, 2:40:13 AM1/16/10
to
Hola:

Si tu intención es pasar un dato a un formulario cualquiera, lo mejor que
puedes hacer es sobrecargar el constructor (procedimiento «New») de dicho
formulario para que acepte argumentos.

Por ejemplo, si tu deseas pasarle un valor al control TextBox existente en
el formulario Form3, éste tendría los siguientes constructores:

Public Class Form3

Public Sub New()

' Constructor por defecto del formulario
'
Me.New(String.Empty)

End Sub

Public Sub New(ByVal nombre As String)

' Llamada necesaria para el Diseñador de Windows Forms.
InitializeComponent()

' Asignamos el valor del control TextBox
txtNombre.Text = nombre

End Sub

End Class

Ahora, desde el formulario padre (Form1), llamaríamos a Form2 y Form3 de la
siguiente manera:

Public Class Form1

Private m_frm2 As Form2
Private m_frm3 As Form3

Private Sub FormOnClosing( _
ByVal sender As Object, _
ByVal e As FormClosingEventArgs)

' Se ha cerrado el formulario hijo; establecemos
' a Nothing el valor del campo.
'
Dim frm As Form = DirectCast(sender, Form)

If frm.Name = "Form2" Then
m_frm2 = Nothing

ElseIf frm.Name = "Form3" Then
m_frm3 = Nothing

End If

End Sub

End Class

Cuando desees mostrar el formulario Form2, ejecutarías:

If (m_frm2 Is Nothing) Then
' Referenciamos el formulario Form2
'
m_frm2 = New Form2()

' Instalamos el controlador para el
' evento FormClosing del formulario
'
AddHandler m_frm2.FormClosing, AddressOf FormOnClosing
End If

m_frm2.MdiParent = Me
m_frm2.Name = "Form2"
m_frm2.Show()

Y cuando desees mostrar el formulario Form3, ejecutarías ésto otro:

If (m_frm3 Is Nothing) Then
' Referenciamos el formulario Form3, pasándole un
' valor al constructor sobrecargado.
'
m_frm3 = New Form3("Probando")

' Instalamos el controlador para el
' evento FormClosing del formulario
'
AddHandler m_frm3.FormClosing, AddressOf FormOnClosing
End If

m_frm3.MdiParent = Me
m_frm3.Name = "Form3"
m_frm3.Show()

Verás como de ésta manera, todo te funcionará adecuadamente. :-)

Un saludo

--
Enrique Martínez
[MS MVP - VB]

Nota informativa: La información contenida en este mensaje, así como el
código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin
garantías de ninguna clase, y no otorga derecho alguno. Usted asume
cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o
sugerido en el presente mensaje.

Miguel F

unread,
Jan 17, 2010, 1:12:41 PM1/17/10
to
Y no es mas facil usar variables friend en un modulo bas? o es que no se
debe hacer as�?

Una variable friend en un modulo bas permite pasar datos no solo entre dos
form, si no en todo el proyecto.

M iguel

"SoftJa�n" <grupo_n...@softjaen.es> escribi� en el mensaje
news:C628259A-466D-4621...@microsoft.com...
> Hola:
>
> Si tu intenci�n es pasar un dato a un formulario cualquiera, lo mejor que

> puedes hacer es sobrecargar el constructor (procedimiento �New�) de dicho
> formulario para que acepte argumentos.
>
> Por ejemplo, si tu deseas pasarle un valor al control TextBox existente en

> el formulario Form3, �ste tendr�a los siguientes constructores:


>
> Public Class Form3
>
> Public Sub New()
>
> ' Constructor por defecto del formulario
> '
> Me.New(String.Empty)
>
> End Sub
>
> Public Sub New(ByVal nombre As String)
>

> ' Llamada necesaria para el Dise�ador de Windows Forms.


> InitializeComponent()
>
> ' Asignamos el valor del control TextBox
> txtNombre.Text = nombre
>
> End Sub
>
> End Class
>

> Ahora, desde el formulario padre (Form1), llamar�amos a Form2 y Form3 de

> la siguiente manera:
>
> Public Class Form1
>
> Private m_frm2 As Form2
> Private m_frm3 As Form3
>
> Private Sub FormOnClosing( _
> ByVal sender As Object, _
> ByVal e As FormClosingEventArgs)
>
> ' Se ha cerrado el formulario hijo; establecemos
> ' a Nothing el valor del campo.
> '
> Dim frm As Form = DirectCast(sender, Form)
>
> If frm.Name = "Form2" Then
> m_frm2 = Nothing
>
> ElseIf frm.Name = "Form3" Then
> m_frm3 = Nothing
>
> End If
>
> End Sub
>
> End Class
>

> Cuando desees mostrar el formulario Form2, ejecutar�as:


>
> If (m_frm2 Is Nothing) Then
> ' Referenciamos el formulario Form2
> '
> m_frm2 = New Form2()
>
> ' Instalamos el controlador para el
> ' evento FormClosing del formulario
> '
> AddHandler m_frm2.FormClosing, AddressOf FormOnClosing
> End If
>
> m_frm2.MdiParent = Me
> m_frm2.Name = "Form2"
> m_frm2.Show()
>

> Y cuando desees mostrar el formulario Form3, ejecutar�as �sto otro:


>
> If (m_frm3 Is Nothing) Then

> ' Referenciamos el formulario Form3, pas�ndole un


> ' valor al constructor sobrecargado.
> '
> m_frm3 = New Form3("Probando")
>
> ' Instalamos el controlador para el
> ' evento FormClosing del formulario
> '
> AddHandler m_frm3.FormClosing, AddressOf FormOnClosing
> End If
>
> m_frm3.MdiParent = Me
> m_frm3.Name = "Form3"
> m_frm3.Show()
>

> Ver�s como de �sta manera, todo te funcionar� adecuadamente. :-)
>
> Un saludo
>
> --
> Enrique Mart�nez
> [MS MVP - VB]
>
> Nota informativa: La informaci�n contenida en este mensaje, as� como el
> c�digo fuente incluido en el mismo, se proporciona �COMO EST��, sin
> garant�as de ninguna clase, y no otorga derecho alguno. Usted asume
> cualquier riesgo al poner en pr�ctica, utilizar o ejecutar lo recomendado

SoftJaén

unread,
Jan 17, 2010, 2:50:00 PM1/17/10
to
"Miguel F" pregunt�:

> Y no es mas facil usar variables friend en un modulo bas? o es que no se

> debe hacer as�?


>
> Una variable friend en un modulo bas permite pasar datos no solo entre dos
> form, si no en todo el proyecto.

�Hombre! Tanto como poder, se puede. Pero digamos que es una buena pr�ctica
de programaci�n, encapsular los procedimientos de propiedad y m�todos en su
correspondiente clase, mayormente sabiendo que el lenguaje nos permite la
sobrecarga de m�todos.

Si mediante par�metros podemos pasar valores a los procedimientos, �para qu�
utilizar variables con �mbito Friend o Public? Cuando el �mbito del
procedimiento sea menor, mucho mejor. S�lo cuando no haya m�s remedio,
entonces es cuando se deber�a de utilizar un �mbito mayor, o utilizar
procedimientos generales a nivel de un M�dulo, con una visibilidad Friend o
Public.

Por supuesto, es mi opini�n personal, que puede que guste o no. :-)

Un saludo

--
Enrique Mart�nez
[MS MVP - VB]

Nota informativa: La informaci�n contenida en este mensaje, as� como el
c�digo fuente incluido en el mismo, se proporciona �COMO EST��, sin
garant�as de ninguna clase, y no otorga derecho alguno. Usted asume
cualquier riesgo al poner en pr�ctica, utilizar o ejecutar lo recomendado o

Miguel F

unread,
Jan 17, 2010, 8:53:53 PM1/17/10
to
Si hablamos de elegancia y c�digo bien hecho, llevas raz�n, si hablamos de
productividad (coste inferior en tiempo y dinero) , creo que mi opci�n gana
a la tuya, ya que se implanta bastante mas r�pido, y teniendo en cuenta los
ordenadores de hoy en dia, tampoco es demasiado gasto de memoria.

tambien es mi opinion, jeje

saludos

"SoftJa�n" <grupo_n...@softjaen.es> escribi� en el mensaje

news:18CF2DF8-F10F-4A58...@microsoft.com...
> "Miguel F" pregunt�:


>
>> Y no es mas facil usar variables friend en un modulo bas? o es que no se

>> debe hacer as�?


>>
>> Una variable friend en un modulo bas permite pasar datos no solo entre
>> dos form, si no en todo el proyecto.
>

> �Hombre! Tanto como poder, se puede. Pero digamos que es una buena
> pr�ctica de programaci�n, encapsular los procedimientos de propiedad y
> m�todos en su correspondiente clase, mayormente sabiendo que el lenguaje
> nos permite la sobrecarga de m�todos.
>
> Si mediante par�metros podemos pasar valores a los procedimientos, �para
> qu� utilizar variables con �mbito Friend o Public? Cuando el �mbito del
> procedimiento sea menor, mucho mejor. S�lo cuando no haya m�s remedio,
> entonces es cuando se deber�a de utilizar un �mbito mayor, o utilizar
> procedimientos generales a nivel de un M�dulo, con una visibilidad Friend
> o Public.
>
> Por supuesto, es mi opini�n personal, que puede que guste o no. :-)
>
> Un saludo
>
> --
> Enrique Mart�nez
> [MS MVP - VB]
>


> Nota informativa: La informaci�n contenida en este mensaje, as� como el
> c�digo fuente incluido en el mismo, se proporciona �COMO EST��, sin

> garant�as de ninguna clase, y no otorga derecho alguno. Usted asume
> cualquier riesgo al poner en pr�ctica, utilizar o ejecutar lo recomendado

AM1978

unread,
Jan 18, 2010, 5:43:29 AM1/18/10
to
On 18 Gen, 02:53, "Miguel F" <mig...@espectaculosfominaya.com> wrote:
> Si hablamos de elegancia y código bien hecho, llevas razón, si hablamos de
> productividad (coste inferior en tiempo y dinero) , creo que mi opción gana
> a la tuya, ya que se implanta bastante mas rápido, y teniendo en cuenta los

> ordenadores de hoy en dia, tampoco es demasiado gasto de memoria.

Siguiendo con opiniones ;-) yo creo que tu opción sólo gana en
productividad (menos tiempo ergo menos dinero) a corto plazo. A poco
que la aplicación sea un poco grande y tenga que ir creciendo... o
haya que mantenerla y eventualmente ampliarla durante muchos años, las
variables globales son un pequeño monstruo que va creciendo y
volviéndose malo malísimo. Si se mantienen muy a raya, es verdad, son
un sistema fácil, rápido y que funciona perfectamente. Pero yo salvo
en proyectos muy pequeños y puntuales no las recomendaría.

Un saludo.

0 new messages