none
Como pasar datos de un form normal a un form hijo todo dentro de un mdiContainer (Padre) Visual Basic .net 2012 RRS feed

  • Pregunta

  • bueno antes de haberle puesto al menu este codigo:

    Dim f As New Productos
            f.MdiParent = Me
            f.Show()

    y al momento de usar el boton donde buscaba el producto lo escogia del datagridview me llenaba los datos en el formulario pero cuando hice eso, me carga el formulario de busqueda pero cuando le doy doble click a la seleccion ya no me los pasa, que me falta?

    Es decir el formulario hijo necesita buscar de otro form elegir, al elegir esa ventana se cierra y pasar los datos, antes sin haber colocado eso funcionaba entonces si el mdi de menus es el padre y el producto es el hijo el buscar producto es otro hijo del hijo? como hago eso?






    jueves, 18 de agosto de 2016 14:35

Respuestas

  • Respecto a lo que me mencionas del New Form mi unica solucion a sido hacer esto:

     Productos.MdiParent = Me
    Productos.Show()

    y alli si funciona bien y se ve como hijo no se pierde y ya no se oculta, si esta bien hacerlo asi gracias espero me respondas y te marco la respuesta.

    • Marcado como respuesta Javier Roque sábado, 4 de marzo de 2017 13:10
    jueves, 18 de agosto de 2016 21:59
  • hola

    para pasa datos de un forma al otroa deberis aplicar la tecnica que comento en el articulo

    Comunicar Formularios

    alli veras como se pasa en el constructor la instancia del forma padre para poder enviar los datos desde el forma hijo

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta Javier Roque sábado, 4 de marzo de 2017 13:09
    viernes, 19 de agosto de 2016 11:09

Todas las respuestas

  • Has debido mezclar en algún sitio una nueva instancia del formulario. Recuerda que cada vez que haces Dim f as New Productos te crea una nueva copia del formulario de productos. Esa copia solo se ve en pantalla si haces f.Show, sino queda oculta. Cuando quieras pasar o leer datos del formulario, tienes que hacerlo a través de esa misma variable "f" que representa la instancia del formulario que ya está abierta. Por supuesto, para eso tienes que guardar la "f" en algún sitio accesible, no puede ser una variable local que se pierda después de hacer el click. Si en lugar de usar esa "f" ejecutas un nuevo "Dim f as New...", entonces esa es otra copia (invisible) del formulario y claro, no contiene los datos que querías traspasar.
    jueves, 18 de agosto de 2016 17:51
  • Solo tengo ese codigo en el menu que al hacer click me jala el form de productos pero si quiero buscar un producto y llenar los textbox del form producto eh alli el gran problema:

    Respecto a lo que mencionas de f intente algo usando la f pero no me salio, bueno sobre lo del menu lo tengo asi:

    Private Sub ProductosToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ProductosToolStripMenuItem.Click
            Dim f As New Productos
            f.MdiParent = Me
            f.Show()
           
            
        End Sub


    Luego cuando quiero llamar al de buscar solo lo tengo asi:

    BuscarProducto.ShowDialog()

    Pero al hacer doble click a la fila elegida del datagridview () nada, tiene sentido lo que dices es una copia k solo se ve en pantalla pero luego se va 

    y del datagrid tengo esto:

     Private Sub dgvProductos_CellMouseDoubleClick(sender As Object, e As DataGridViewCellMouseEventArgs) Handles dgvProductos.CellMouseDoubleClick
            If e.RowIndex < 0 Then Exit Sub
            Productos.txtCodigo.Text = dgvProductos.Item(0, e.RowIndex).Value
            Productos.Fecha.Text = dgvProductos.Item(1, e.RowIndex).Value
            Productos.cboNombre.Text = dgvProductos.Item(2, e.RowIndex).Value
            Productos.txtUm.Text = dgvProductos.Item(3, e.RowIndex).Value
            Productos.txtMarca.Text = dgvProductos.Item(4, e.RowIndex).Value
            Productos.txtModelo.Text = dgvProductos.Item(5, e.RowIndex).Value
            Productos.txtSerie.Text = dgvProductos.Item(6, e.RowIndex).Value
            Productos.cboEstado.Text = dgvProductos.Item(7, e.RowIndex).Value
            Productos.txtDetalle.Text = dgvProductos.Item(8, e.RowIndex).Value
            Productos.txtPrecio.Text = dgvProductos.Item(9, e.RowIndex).Value
            Productos.txtStock.Text = dgvProductos.Item(10, e.RowIndex).Value
            Productos.txtTipoM.Text = dgvProductos.Item(11, e.RowIndex).Value
            Productos.IdCat.Text = dgvProductos.Item(13, e.RowIndex).Value
            If Not IsDBNull(dgvProductos.Item(5, e.RowIndex).Value) Then
                Productos.Imagen.Image = Bytes_Imagen(CType(dgvProductos.Item(12, e.RowIndex).Value, Byte()))
            End If
            'Tablero.lblUsuario.Text = dgvProductos.Item(14, e.RowIndex).Value
            Productos.btnEditar.Enabled = True
            Productos.btnEliminar.Enabled = True
    
            Me.Close()
        End Sub

    pero como dice esta oculto entonces eso del f iria en esa seccion o cuando o que parte:

    Es algo asi como esto:?

    Dim f1 as New Form1()
    f1.Show()
    Dim f2 as New Form2(f1)
    f2.Show()

    lo intente y no me salio


    jueves, 18 de agosto de 2016 21:15
  • Respecto a lo que me mencionas del New Form mi unica solucion a sido hacer esto:

     Productos.MdiParent = Me
    Productos.Show()

    y alli si funciona bien y se ve como hijo no se pierde y ya no se oculta, si esta bien hacerlo asi gracias espero me respondas y te marco la respuesta.

    • Marcado como respuesta Javier Roque sábado, 4 de marzo de 2017 13:10
    jueves, 18 de agosto de 2016 21:59
  • Hay algo que no me encaja. Estás llamando a Productos como si fuera el nombre de la instancia en lugar del nombre de la clase. Eso funcionaba en el antiguo VB6 porque internamente ejecutaba una sentencia tal como Dim Productos as New Productos, por lo que "Productos" representaba a la vez tanto la instancia como la clase. Pero eso no ocurre automáticamente en VB.NET salvo que lo hagas tú expresamente en algún sitio. Dado que no te sale error de compilación, significa que por algún sitio estás declarando la variable Productos (además de la clase Productos) y ahí es donde le haces el New. Conviene que esto no lo dejes "al azar", sino que tengas bien claro dónde y cuándo estás instanciando cada uno de tus forms y cuál es la variable que contiene la instancia, para que no te ocurran "cosas raras" como que leas o asignes valores que van a parar a una segunda instancia oculta, o que "cuelgues" del MdiParent una instancia que no era la que querías colgar.
    viernes, 19 de agosto de 2016 6:32
  • hola

    para pasa datos de un forma al otroa deberis aplicar la tecnica que comento en el articulo

    Comunicar Formularios

    alli veras como se pasa en el constructor la instancia del forma padre para poder enviar los datos desde el forma hijo

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta Javier Roque sábado, 4 de marzo de 2017 13:09
    viernes, 19 de agosto de 2016 11:09
  • Alberto Poblacion;

    Segun  lo que me comentas no recuerdo haberlo declarado muy aparte del Class pero voy a revisarlo.

    viernes, 19 de agosto de 2016 13:53
  • Leandro Tuttini

    lo revise tu link tambien pero no lo entendi voy a poner una imagen acerca de lo que estoy hablando pero mediante un link porque no puedo poner imagenes propias aca.

    http://subefotos.com/ver/?ebf23bb9ddd7dd098d2027af4db294d1o.jpg

    A eso me refiero el mdi es el maximizado donde estan los menus luego del meu llamo al producto y del producto busco el articulo que aldarle doble click llenara los campos de la ventana registro de producto.

    Ahora que estoy mirando tu link es otro link voy a revisarlo igual te dejo la imagen, de todos modos

    Gracias por responder

    Asp Net no domino 


    viernes, 19 de agosto de 2016 13:59
  • de casualidad alguno de uds sabe como hacer esto:

    https://social.msdn.microsoft.com/Forums/es-ES/9cb92e90-7a78-4cd2-835f-c3501fa62b2b/3-preguntas-respecto-al-mdiform?forum=winformses

    es mi otra pregunta pero no tengo respuesta sobre eso de la barra de tareas que no lo tape ni detras 

    viernes, 19 de agosto de 2016 14:01