none
Mostrar un User Control en un panel desde otro User Control al presionar un botón RRS feed

  • Question

  • Saludos,

    Gracias de antemano a cualquier persona que me pueda ayudar a resolver este problema.

    Tengo un Windows Form1 con un panel(pnMenu) fijado a la izquierda, donde al ejecutarse muestra un User Control(ucMantenimeinto) con un grupo de Botones (btn1, btn2, etc.) y también tengo otro panel fijado en el centro(pnControles) donde al hacer click a un boton del pnMenu, debería de mostrar un User Control(ucCliente) en pnControles. 

    En el Windows Form1 tengo el siguiente condigo:

    Public Class Form1
    Private Sub AddControlsToPanel(ByRef c As ContainerControl, ByRef pn as Control)
        c.Dock = DockStyle.Fill
        pn.Controls.Clear()
        pn.Controls.Add(c)
    End Sub
    
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
           
            Dim ucM As New ucMantenimiento
            AddControlsToFrmPanel(mnM, pnControles)
    
    End Sub
    End Class

    Al iniciar la proyecto, en el formulario mostrara en la parte izquierda el User Control(ucMantenimiento) con los botones pero al hacer click en uno de estos, no me muestra el User Control(ucCliente) en el panel del centro(pnControles).

    En un boton de ucMantenimiento tengo el siguiente codigo:

        

    Public Class ucMantenimiento

        Dim frm As New Form1

        Private Sub AddControlsToPanel(ByRef c As ContainerControl, ByRef pn As Control)
            c.Dock = DockStyle.Fill
            pn.Controls.Clear()
            pn.Controls.Add(c)
        End Sub

        Private Sub btn1_Click(sender As Object, e As EventArgs) Handles btn1.Click

    Dim ucC as New ucCliente

    AddControlsToPanel(ucC, frm.panelControls)
        End Sub
    End Class

    No se que mas hacer, simplemente quiero que ucCliente se muestre en el pnControles. Espero sus respuestas.

    Wednesday, February 12, 2020 5:31 AM

All replies

  • hola

    >>en el formulario mostrara en la parte izquierda el User Control(ucMantenimiento) con los botones pero al hacer click en uno de estos, no me muestra el User Control(ucCliente) en el panel del centro(pnControles).

    No aplica usar el new para crear una nueva instancia del Form1, tienes que usar la instancia existente

    podrias poner una propiedad al Parent representa al form que contiene el panel

    Get access to parent control from user control

    o sino exponer una propiedad que tu crees para asignar el "this" cuando lo agregas al panel

    La idea es tener la instancia del form actual para acceder al otro panel, no se crea una nueva con el new en la linea    

    Dim frm As New Form1

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    Wednesday, February 12, 2020 11:55 AM
  • Gracias por tu ayuda pero no me funciono lo que me has sugerido.

    Investigando un poco, encontré la solución:

    Public Class ucMantenimiento Dim frm As New Form1 Private Sub AddControlsToPanel(ByRef c As ContainerControl, ByRef pn As Control) c.Dock = DockStyle.Fill pn.Controls.Clear() pn.Controls.Add(c) End Sub Private Sub btn1_Click(sender As Object, e As EventArgs) Handles btn1.Click Dim ucC as New ucCliente

    //Esta fue solucion frm = Me.FindForm

    //Fin AddControlsToPanel(ucC, frm.panelControls) End Sub End Class

    De todos modos, muchas gracias.

    Saludos.

    Thursday, February 13, 2020 7:52 PM
  • hola

    No se que sera eso del FindForm, pero basicamente es lo que comente, no debias crear una nueva instancia sino usar la existente

    Estas preguntando en el foro de c#, pero veo que programas en vb.net, ese Me no existe en c#

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    Thursday, February 13, 2020 7:56 PM