Visual Basic.NET - Pasar nombre formulario como parámetro, ¿se puede?

 
Vista:
sin imagen de perfil
Val: 12
Ha aumentado su posición en 6 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Pasar nombre formulario como parámetro, ¿se puede?

Publicado por Carlos (36 intervenciones) el 08/03/2018 17:02:09
Hola
Tengo 2 formularios: uno que lo llamaré formulario1 y otro formulario2.
En cada uno de los formularios tengo una caja de texto, que se llaman igual: Text1.
Reduzco el código para que sea más sencillo de entender, sería algo así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Sub FormateaCampos(Acceso)
 
    Dim Ventana1 As formulario1 = New formulario1
    Dim Ventana2 As formulario2 = New formulario2
 
    If Acceso = "OpcionA" Then
        showForms(Ventana1 )
    Else
         showForms(Ventana2)
    End If
 
End sub
 
Sub showForms(NOMBRE_FORMULARIO As Form)
 
    NOMBRE_FORMULARIO.text1.Text = "xxx"
 
End Sub

Pero esto no funciona. ¿Alguien me podría decir donde tengo el fallo?
Muchas gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

Pasar nombre formulario como parámetro, ¿se puede?

Publicado por omar (166 intervenciones) el 08/03/2018 18:46:50
saludos para traer datos a otro form

1
form1.textbox.text1= formulario2.textbox2.text1
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 12
Ha aumentado su posición en 6 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Pasar nombre formulario como parámetro, ¿se puede?

Publicado por carlos (36 intervenciones) el 08/03/2018 22:12:04
No, yo no se en que formulario quiero actuar. Depende de una decisión del usuario
Puede que sea:
formulario1.text1.Text = "xxx" o formulario2.text1.Text = "xxx".
Si solo fuera esa única línea, ok, pero hay unas 60 líneas:

1
2
3
4
5
6
7
8
9
10
If Acceso = "OpcionA" Then
     formulario1.text1.Text = "xxx"
     formulario1.backcolor = vbcolor
     formulario1.text1.font = ....                   y así unas 60 instrucciones más y repetirlas en el 'else'
Else
     formulario2.text1.Text = "xxx"
     formulario2.text1.backcolor = vbcolor
     formulario2.text1.font = ....                      otras vez las mismas 60 líneas
 
End If


por eso quiero pasar el nombre del formulario a una rubrutina, y no repetir lo mismo 60 veces por duplicado:


1
2
3
4
5
6
7
Sub showForms(NOMBRE_FORMULARIO As Form)
 
    NOMBRE_FORMULARIO.text1.Text = "xxx"
    NOMBRE_FORMULARIO.backcolor = vbcolor
    NOMBRE_FORMULARIO.text1.font = ....
 
End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 153
Ha aumentado 1 puesto en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Pasar nombre formulario como parámetro, ¿se puede?

Publicado por Yamil Bracho (631 intervenciones) el 08/03/2018 22:23:38
Puede ser algo como

1
2
3
4
5
6
7
Sub showForms(form As Form)
 
form.Controls("text1").Text = "xxx"
form.backcolor = vbcolor
form.Controls(".text1").font = ....
 
End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Pasar nombre formulario como parámetro, ¿se puede?

Publicado por Carlos (1 intervención) el 09/03/2018 12:10:57
Gracias por la respuesta. Con lo que me has dicho he avanzado porque al poner 'controls' en: form.Controls("text1").Text = "xxx" al menos ya no me da ningún fallo por lo que entiendo que va todo bien.

Ahora lo que me pasa es que no ejecuta esas órdenes. Cuando voy a mirar por ejemplo ese 'Text1' en su caja debería ver escrito 'xxx" y no lo hace. El resto de líneas tampoco las ejecuta, imagino que no refresca o algo similar.

Se si te ocurre porque pudiera ser, te lo agradecería aún mas. Aunque ya he avanzado bastante con lo otro que me dijiste
Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Pasar nombre formulario como parámetro, ¿se puede?

Publicado por carlos (1 intervención) el 10/03/2018 12:45:16
En el siguiente ejemplo, os pongo lo que no funciona, algo me está faltando:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Sub Format()
 
    Dim Ventana1 As formulario1 = New formulario1
    showForm(Ventana1 )
 
End sub
 
 
Sub showForm(form As Form)
 
form.Controls("text1").Text = "xxx"      'Esto no da error, pero no lo ejecuta, no hace nada!! No se porque?
 
formulario1.text1.text = "xxx"              'Esta forma 'manual' que debería ser lo mismo, si lo hace bien
 
End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de kingk
Val: 173
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Pasar nombre formulario como parámetro, ¿se puede?

Publicado por kingk (77 intervenciones) el 10/03/2018 16:32:48
Si lo que sucede es que llamas al formulario1 de manera directa,así:
formulario1.show()
Obviamente no se vera como quieres porque al escribir:
Dim ventana1 as formulario1=new formulario1
Estas creando una nueva instancia del formulario. Y en el método showForm tendrías que coloçar al final:
Form.Show()
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 12
Ha aumentado su posición en 6 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Pasar nombre formulario como parámetro, ¿se puede?

Publicado por carlos (36 intervenciones) el 10/03/2018 17:58:00
Genial, tienes razón, gracias. Con estos comentarios ya estoy cerca.
Si hago lo siguiente funciona:

1
2
3
4
5
6
7
8
9
10
11
12
13
Sub Format()
 
       Dim Ventana1 = Form.ActiveForm
       showForm(Ventana1 )
 
End sub
 
 
Sub showForm(form As Form)
 
       form.Controls("text1").Text = "xxx"     'FUNCIONA..!
 
End Sub


Lo único que el formulario que quiero pasarle, es el formulario hijo activo, ya que puede haber varios hijos abiertos. Entonces si hago esto ya no funciona:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Sub Format()
 
     Dim Ventana1 = Principal.ActiveMdiChild                                                               'Principal es el padre
 
     'También he probado esto: Dim Ventana1 As Form = Principal.ActiveMdiChild
     'También he probado esto: Dim Ventana1 As Tratar_Empresas = CType(Principal.ActiveMdiChild, Tratar_Empresas)  'Tratar_Empresas es el formulario hijo, puede haber varios iguales (instancias)
 
     showForm(Ventana1 )
 
End sub
 
 
Sub showForm(form As Form)
 
     form.Controls("text1").Text = "xxx"            'AQUÍ DA ERROR!! :(  Referencia a objeto no establecida como instancia
 
End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de kingk
Val: 173
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Pasar nombre formulario como parámetro, ¿se puede?

Publicado por kingk (77 intervenciones) el 10/03/2018 21:52:55
Debería funcionar con:
Dim ventana1 As Form=ActiveMdiChild
showForm(ventana1)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 12
Ha aumentado su posición en 6 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Pasar nombre formulario como parámetro, ¿se puede?

Publicado por carlos (36 intervenciones) el 11/03/2018 11:55:37
Nada, no hay forma de pasar el formulario hijo activo como parámetro. Si hago lo siguiente da error:

Dim Ventana1 = Principal.ActiveMdiChild 'Principal es el padre

showForm(Ventana1 )

End sub


Sub showForm(form As Form)

form.Controls("text1").Text = "xxx" 'AQUÍ DA ERROR!! :( Referencia a objeto no establecida como instancia

End Sub

El caso es que si pongo lo siguiente dentro de la función si funciona: form.backcolor = Color.Green

Si a alguien se lo ocurre algo, se lo agradecería.
Saludos,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar