none
Recorrer formularios hijos desde el padre RRS feed

  • Pregunta

  • Hola a todos, me ha surgido del siguiente problema. Desde el formulario padre he puesto unos botones para poder cambiar de idioma los textos, pero no sé como hacer que desde el "padre" recorrer los formularios que esten abiertos y poder cambiar de idioma los textos según el idioma seleccionado en el padre. Tambien he de decir que los formularios hijos heredan de un formulario base. ¿Alguién me puede ayudar?

    Un saludo.

    • Cambiado Enrique M. Montejo lunes, 4 de junio de 2012 6:40 Windows Forms (De:Lenguaje VB.NET)
    martes, 29 de mayo de 2012 20:51

Todas las respuestas

  • Puede tratar de resolverlo entendiendo este simple código:

      Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    
            Dim frm2 As New Form
    
            frm2.MdiParent = Me
    
            frm2.Text = TextBox1.Text
    
            frm2.Show()
    
        End Sub

    Con eso todos los formularios que habras al dar click en un botón, tendrán el texto que se le asigne al TextBox1


    Estudiante de Sistemas Informáticos.

    martes, 29 de mayo de 2012 21:11
  • Gracias Horde 98 por tu respuesta, pero si pongo la llamada como me indicas me abre el formulario pero pierde la herencia del formulario base, aparte de que me interesa cambiar también los "Text" de todos los componentes del formulario hijo. Estos textos los tengo en un Resource para cada idioma

        Private Sub AsignarIdioma_alosComponentes(ByVal simbolo As String)
            btnMaquinas.Text = (My.Resources.Resource.Maquinas)
            btnIntalaciones.Text = (My.Resources.Resource.Instalaciones)
            btnLocales.Text = (My.Resources.Resource.Locales)
            btnRecaudacion.Text = (My.Resources.Resource.Recaudacion)
        End Sub

    • Propuesto como respuesta P. Mata miércoles, 6 de junio de 2012 21:07
    • Votado como útil P. Mata miércoles, 6 de junio de 2012 21:07
    martes, 29 de mayo de 2012 21:48
  • Hola

    Para recorrer los formularios abiertos puedes emplear esto

            For Each i As Form In My.Application.OpenForms
    
                ' Comprobamos que el form sea hijo de este
                If i.MdiParent Is Me Then
                    Dim frm As frmBase = CType(i, frmBase)
    
                    frm.TextBox1.Text = "Valor"
    
                End If
            Next
    Supongo que los textbox que quieres modificar los heredas del formulario base, si no te produciria un error

    • Editado ToniAG martes, 29 de mayo de 2012 23:58
    • Propuesto como respuesta By AlaN lunes, 4 de junio de 2012 12:18
    • Votado como útil By AlaN lunes, 4 de junio de 2012 12:20
    martes, 29 de mayo de 2012 23:52
  • Hola ToniAg, he provado el código que me indicas, pero solo me dá acceso a cambiar la propiedad "Text" de los TexBox, pero no la de los Buttons (y no he probado en otros controles). Tenia pensado en modificar la propiedad "Text" de los controles en el formulario Base y repintar los formularios abiertos (hijos), pero no sé si esto funcionara.

    miércoles, 30 de mayo de 2012 16:18
  • Al final he optado por controlar si hay formularios abiertos, si es así inhabilito el cambio del idioma y si no, los vuelvo a
    habilitar.
    jueves, 31 de mayo de 2012 19:20
  • Hola

    Pero la forma que te di, debería de funcionar. Siempre y cuando los controles (TextBox ComboBox, Button,.. estén en el formulario base (de donde heredas los formularios) si tienes otros controles la búsqueda deberá de hacerse de otra manera

    jueves, 31 de mayo de 2012 20:25
  • Hola.

    Este codigo solo recorre los formularios abiertos, lo que debes hacer es uno que luego que encuentres el formulario abierto recorra los controles en el, es una tarea que toma algo de tiempo, ya que a parte de recorrer los formularios recorres los controles en el, y eso toma algo de tiempo dependiendo de el equipo y la cantidad de controles por formulario, mira un ejemplo que te puede ilustrar:

    Private Sub cmdCambiar_Click(sender As System.Object, e As System.EventArgs) Handles cmdCambiar.Click

    'Recorre todos los formularios abiertos de la aplicacion.
    For Each i As Form In My.Application.OpenForms

                ' Comprobamos que el form sea hijo de este abierto
                If i.MdiParent Is Me Then
                    Dim frm As Form = CType(i, Form)
    Cambiar(frm)
                End If
    Next
    End Sub


    'Recorre todos los controles del formulario recibido
    'Nota: si el form tiene controles contedores estos no son recorrido.
    Sub Cambiar(ByVal parent As Form) 
            Try 
                    For Each obj As Control In parent.Controls 
                        If TypeOf obj Is TextBox Then 
                            CType(obj, TextBox).Text = Nothing 
                        End If 
                    Next 
            Catch ex As Exception 
                MessageBox.Show(ex.Message) 
            End Try 
    End Sub  

    Saludos.

    lunes, 4 de junio de 2012 12:45
  • Hola.

    Pararecorrer todos los controles de un formulario puedes hacer lo siguiente:

    for each _Controles in Me.Controls
    _Controles.Text = "Texto Cambiado"
    next

    Pruebalo en algún formulario y verás que todos los controles cambiarán de texto.


    Estudiante de Sistemas Informáticos.

    miércoles, 6 de junio de 2012 21:11