none
Pasar formulario como variable a otro formulario y retornarle un valor RRS feed

  • Pregunta

  • Hola todos,

    A ver si se me explicar.

    En VB6 tenía un formulario de consultas al que podía llamar desde varios formularios diferentes pasándole las diferentes variables para hacer la consulta, FormularioOrigen, TablaAbrir, CampoABuscar, TxtOrigen… hacia la consulta y devolvía el valor obtenido al TxtOrigen del FormularioOrigen.

    Esto que en VB6 funcionaba bien no hay manera de que sepa hacerlo en VB.net.

    Tengo el siguiente código desde el formulario de origen:

    Private Sub TxtCodigo_KeyDown(sender As Object, e As KeyEventArgs) Handles TxtCodigo.KeyDown

            If e.KeyCode = 114 Then 'F3

                FrmBusca.Inicio(Me, "tabla", "CODIGO", "NOMBRE", TxtCodigo)

                FrmBusca.ShowDialog()

            End If

        End Sub

    En el formulario de consultas tengo esto:

        Public CodiBuscar As String

        Public CampBuscar As String

        Public NomTabla As String

        Public FrmForm As String

        Public TxtdeDondeVengo As TextBox

        Public FRM As Form

       

    Public Sub Inicio(Forma As Form, Taula As String, CodiBusc As String, CampBus As String, TxtOrigen As TextBox)

            CampBuscar = CampBus

            CodiBuscar = CodiBusc

            NomTabla = Taula

            FRM = Forma

            TxtdeDondeVengo = TxtOrigen

    Resumiendo. Hago la consulta con una "Select" y muestro los datos en un DataGridView.

    La idea es que al hacer clic en el DataGridView coja el valor de la celda y vuelque el resultado en una caja de texto del formulario de origen. Tengo este código pero no consigo que me reconozca el formulario de origen con lo que no tengo la caja de texto donde volcar el resultado.

    Private Sub DataGridView _CellClick(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView.CellClick

            Dim columnIndex As Integer = e.ColumnIndex

            If FRM.Controls.ContainsKey(TxtdeDondeVengo .Name) Then

               FRM.Controls(TxtDonVinc) = DataGridCerca.Rows(e.RowIndex).Cells(0).Value

            End If

        End Sub

    La pregunta es como puedo pasar el nombre del formulario como variable a otro formulario y retornar un valor de este al formulario que lo llama.

    jueves, 31 de enero de 2019 13:46

Respuestas

  • Hola:
    El ejemplo consta de 3 Forms.
    El Form1 puede llamar al Form2 o al FrmLlamado
    El Form2 puede llamar al FrmLlamado
    En el FrmLlamado, se escriben caracteres en el TextBox y al pulsar el boton cerrar, estos caracters se escribiran en el TextBox del Form llamante

    Imagenes de los 3 Forms

    Codigo de los 3 Forms

    Public Class Form1
        Private Sub btnFrmLlamado_Click(sender As Object, e As EventArgs) Handles btnFrmLlamado.Click
            Me.TextBox1.Text = ""
            Using loForm As New FrmLlamado
                loForm.Padre1 = Me
                loForm.ShowDialog()
            End Using
        End Sub

        Private Sub btnForm2_Click(sender As Object, e As EventArgs) Handles btnForm2.Click
            Using loForm As New Form2
                loForm.ShowDialog()
            End Using
        End Sub
    End Class

    Public Class Form2
        Private Sub btnFrmLlamado_Click(sender As Object, e As EventArgs) Handles btnFrmLlamado.Click
            Me.TextBox1.Text = ""
            Using loForm As New FrmLlamado
                loForm.Padre2 = Me
                loForm.ShowDialog()
            End Using
        End Sub

    Public Class FrmLlamado
        Private mFrmPadre1 As Form1
        Private mFrmPadre2 As Form2
        Public Property Padre1() As Form1
            Get
                Return mFrmPadre1
            End Get
            Set(ByVal value As Form1)
                mFrmPadre1 = value
            End Set
        End Property
        Public Property Padre2() As Form2
            Get
                Return mFrmPadre2
            End Get
            Set(ByVal value As Form2)
                mFrmPadre2 = value
            End Set
        End Property

        Private Sub btnCerrar_Click(sender As Object, e As EventArgs) Handles btnCerrar.Click
            If IsNothing(mFrmPadre1) = True Then
                mFrmPadre2.TextBox1.Text = Me.TextBox1.Text
            Else
                mFrmPadre1.TextBox1.Text = Me.TextBox1.Text
            End If
            Me.Close()
        End Sub
    End Class

    Un saludo desde Bilbo
    Carlos

    viernes, 1 de febrero de 2019 8:50

Todas las respuestas

  • Buenos, <o:p></o:p>

    No me queda claro lo que necesitas, existen muchas formas de pasar valores de un formulario a otro en el mundo de .net, pero te aconsejo leer sobre declaración de propiedades de formularios, debes tener en cuenta que para que el formulario mantenga los valores de propiedades debes tenerlo declarado e inicializado, otra manera es utilizando clases y pasando la clase como parámetro al formulario, etc. Un ejemplo usando propiedades es el siguiente:<o:p></o:p>

    En este caso declaro el formulario e inicializo de forma global y le paso mediante un botón el nombre del formulario 1 al formulario 2<o:p></o:p>

    Código del formulario 1:

    Public Class Form1
        'Declaro la variable global del formulario 2 para que mantenga los valores
        Dim frm As New Form2()
    
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            'Asigno el nombre del formulario 1 a la propiedad del formulario 2
            frm.Valor = Me.Name
            frm.ShowDialog()
        End Sub
    End Class

    Código del formulario 2

    Public Class Form2
    
        Private _valor As String
        Public Property Valor() As String
            Get
                Return _valor
            End Get
            Set(ByVal value As String)
                _valor = value
            End Set
        End Property
    
    
        Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            Label1.Text = Valor
        End Sub
    End Class

    Espero que te sirva,

    Saludos.

    jueves, 31 de enero de 2019 14:10
  • Hola Pedro,

    Gracias por la respuesta.

    Siguiendo tu ejemplo ponemos un TextBox1 en el Form1

    Ponemos un Button1 en el Form2

    Hacemos clic en el Button1 del Form1 y nos lleva al Form2

    Al Hacer clic en el Button1 del Form2 le pasamos Valor al TextBox1 del Form1

    Mi problema es que desconozco el formulario de dónde vengo así que no me sirve esto:

    Form1.TextBox1.text = Me.Label1.text

    Creo que debería ser algo así pero no funciona:

    Valor.Textbox1.text = Me.Label1.text

    ¿Alguna idea?

    jueves, 31 de enero de 2019 20:01
  • Hola:
    El ejemplo consta de 3 Forms.
    El Form1 puede llamar al Form2 o al FrmLlamado
    El Form2 puede llamar al FrmLlamado
    En el FrmLlamado, se escriben caracteres en el TextBox y al pulsar el boton cerrar, estos caracters se escribiran en el TextBox del Form llamante

    Imagenes de los 3 Forms

    Codigo de los 3 Forms

    Public Class Form1
        Private Sub btnFrmLlamado_Click(sender As Object, e As EventArgs) Handles btnFrmLlamado.Click
            Me.TextBox1.Text = ""
            Using loForm As New FrmLlamado
                loForm.Padre1 = Me
                loForm.ShowDialog()
            End Using
        End Sub

        Private Sub btnForm2_Click(sender As Object, e As EventArgs) Handles btnForm2.Click
            Using loForm As New Form2
                loForm.ShowDialog()
            End Using
        End Sub
    End Class

    Public Class Form2
        Private Sub btnFrmLlamado_Click(sender As Object, e As EventArgs) Handles btnFrmLlamado.Click
            Me.TextBox1.Text = ""
            Using loForm As New FrmLlamado
                loForm.Padre2 = Me
                loForm.ShowDialog()
            End Using
        End Sub

    Public Class FrmLlamado
        Private mFrmPadre1 As Form1
        Private mFrmPadre2 As Form2
        Public Property Padre1() As Form1
            Get
                Return mFrmPadre1
            End Get
            Set(ByVal value As Form1)
                mFrmPadre1 = value
            End Set
        End Property
        Public Property Padre2() As Form2
            Get
                Return mFrmPadre2
            End Get
            Set(ByVal value As Form2)
                mFrmPadre2 = value
            End Set
        End Property

        Private Sub btnCerrar_Click(sender As Object, e As EventArgs) Handles btnCerrar.Click
            If IsNothing(mFrmPadre1) = True Then
                mFrmPadre2.TextBox1.Text = Me.TextBox1.Text
            Else
                mFrmPadre1.TextBox1.Text = Me.TextBox1.Text
            End If
            Me.Close()
        End Sub
    End Class

    Un saludo desde Bilbo
    Carlos

    viernes, 1 de febrero de 2019 8:50
  • Perfecto Carlos!!!

    Esto es justamente lo que necesito.

    Muchas gracias!!!!

    viernes, 1 de febrero de 2019 12:15