none
controlar controles de un form desde otro form RRS feed

  • Pregunta

  • hola que tal. Necesito ayuda una vez mas!!!

    Necesito cambiar la propiedad enabled de un boton que está en un formulario, desde otro formulario

    Les comento la situación. Tengo una aplicacion MDI y en ella tengo dos formularios hijos, supongamos form1 y form2.

    El form1 tiene un boton que al presionarlo, se abre el form2 e inmediatamente despues de presionarlo, cambia su propiedad enabled a false.

    El form2 tambien tiene un boton, pero al presionarlo, debe habilitar el boton del form1. Esto es lo que no puedo hacer .

    A continuación les incluyo el código de los dos formularios:

    Public Class frmMain

        Private Sub frmMain.LoadLoad(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase .Load

            Dim frm1 As New form1

            frm1.MDIParent = Me

            frm1.Show()

        End Sub

    End Class

     

    Public Class form1

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

            Dim frm2 As New form2

            Me .Button1.Enabled = False

            frm.MDIParent = frmMain

            frm.Show()

        End Sub

    End Class

     

    Public Class form2

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

            form1.Button1.Enabled = True

        End Sub

    End Class


    Espero que me puedan ayudar. Saludos
    miércoles, 15 de julio de 2009 2:14

Respuestas

  • "Leo González" escribió:

    > El form2 tambien tiene un boton, pero al presionarlo, debe habilitar el boton del form1. Esto es lo que no puedo hacer .

    Hola:

    Si Form1 está abierto, y si estás utilizando Visual Basic 2005 ó 2008, puedes hacer uso de la colección «OpenForms» para referenciar un formulario actualmente abierto:

    Public Class Form2

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

            ' Referenciamos Form1
            '
            Dim frm As Form1 = DirectCast(Application.OpenForms.Item("Form1"), Form1)

            frm.Button1.Enabled = True

        End Sub

    Se comprende que el control Button existente en Form1 tiene un ámbito Friend o Public.


    End Class


    Un saludo


    Enrique Martínez [MS MVP - VB]
    jueves, 16 de julio de 2009 14:38
    Moderador
  • hola

    puedes agregar un modulo y dentro de el declarar la variable con la cual vas a llamar al form1

    public frm1 as new form1

    el codigo donde llamas a form1 dejalo igual nadamas quita la linea dim frm1 as new form1

    el codigo para llamar a form2 dejalo igual

    y el codigo para volver a habilitar el boton ponlo asi: frm1.button1.enabled=true

    ojala te sirva,

    Saludos
    Edgar López R.
    si la respuesta te fue de utilidad, no olvides marcarla como correcta o útil.
    • Marcado como respuesta Leo González miércoles, 15 de julio de 2009 14:17
    miércoles, 15 de julio de 2009 2:35
  • :-)
    Hola,

    Lo mejor es que dentro de cada Form declares una propiedad publica de tipo Form llamada 'FormLlamador' (por ejemplo). Podrías tener también una propiedad o un método para cambiar el estado de los botones.
    Al abrir los formularios estableces el valor de la propiedad al valor del formulario (por ejemplo al abrir Form2 le dices que FormLlamador = Form1), y luego llamas al método o la propiedad:

    'En Form1 y Form2 declaras:

    Public FormLlamador AS Form

    Public Sub ActivaBoton(estado as Boolean)
        Button1.Enabled = estado
    End Sub

    'Luego al abrir el formulario:

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim frm2 As New form2
        Me .Button1.Enabled = False 
        frm.MDIParent = frmMain
        frm.FormLlamador = Me
        frm.Show()
    End Sub

    Y luego te basta con hacer:

    FormLlamador.ActivaBoton(true)

    Saludos,

    No olvides marcar la respuesta como correcta si te ha sido de utilidad :-)

    [MS-MVP-MCTS]

    Mi Perfil MVP en: https://mvp.support.microsoft.com/profile/Lluis
    NUG: http://andorradotnet.com
    Web: http://www.ordeeno.com
    Blog: http://msmvps.com/blogs/lfranco
    Geeks: http://geeks.ms/blogs/lfranco

    miércoles, 15 de julio de 2009 10:27
    Moderador

Todas las respuestas

  • hola

    puedes agregar un modulo y dentro de el declarar la variable con la cual vas a llamar al form1

    public frm1 as new form1

    el codigo donde llamas a form1 dejalo igual nadamas quita la linea dim frm1 as new form1

    el codigo para llamar a form2 dejalo igual

    y el codigo para volver a habilitar el boton ponlo asi: frm1.button1.enabled=true

    ojala te sirva,

    Saludos
    Edgar López R.
    si la respuesta te fue de utilidad, no olvides marcarla como correcta o útil.
    • Marcado como respuesta Leo González miércoles, 15 de julio de 2009 14:17
    miércoles, 15 de julio de 2009 2:35
  • :-)
    Hola,

    Lo mejor es que dentro de cada Form declares una propiedad publica de tipo Form llamada 'FormLlamador' (por ejemplo). Podrías tener también una propiedad o un método para cambiar el estado de los botones.
    Al abrir los formularios estableces el valor de la propiedad al valor del formulario (por ejemplo al abrir Form2 le dices que FormLlamador = Form1), y luego llamas al método o la propiedad:

    'En Form1 y Form2 declaras:

    Public FormLlamador AS Form

    Public Sub ActivaBoton(estado as Boolean)
        Button1.Enabled = estado
    End Sub

    'Luego al abrir el formulario:

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim frm2 As New form2
        Me .Button1.Enabled = False 
        frm.MDIParent = frmMain
        frm.FormLlamador = Me
        frm.Show()
    End Sub

    Y luego te basta con hacer:

    FormLlamador.ActivaBoton(true)

    Saludos,

    No olvides marcar la respuesta como correcta si te ha sido de utilidad :-)

    [MS-MVP-MCTS]

    Mi Perfil MVP en: https://mvp.support.microsoft.com/profile/Lluis
    NUG: http://andorradotnet.com
    Web: http://www.ordeeno.com
    Blog: http://msmvps.com/blogs/lfranco
    Geeks: http://geeks.ms/blogs/lfranco

    miércoles, 15 de julio de 2009 10:27
    Moderador
  • Muchas gracias Edgar. Me funcioonó de 10!!!. saludos
    miércoles, 15 de julio de 2009 15:48
  • ya lo habia intentado de esta forma y no pude hacer que funcione. Es como que no encuentra la instancia del formulario. Gracias por la respuesta!!!
    miércoles, 15 de julio de 2009 15:49
  • "Leo González" escribió:

    > El form2 tambien tiene un boton, pero al presionarlo, debe habilitar el boton del form1. Esto es lo que no puedo hacer .

    Hola:

    Si Form1 está abierto, y si estás utilizando Visual Basic 2005 ó 2008, puedes hacer uso de la colección «OpenForms» para referenciar un formulario actualmente abierto:

    Public Class Form2

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

            ' Referenciamos Form1
            '
            Dim frm As Form1 = DirectCast(Application.OpenForms.Item("Form1"), Form1)

            frm.Button1.Enabled = True

        End Sub

    Se comprende que el control Button existente en Form1 tiene un ámbito Friend o Public.


    End Class


    Un saludo


    Enrique Martínez [MS MVP - VB]
    jueves, 16 de julio de 2009 14:38
    Moderador