Tengo una pantalla que está dividido por un par de splitcontainers. Uno de ellos contiene los rectángulos que el usuario los componentes que he realizado, estos «rectángulos» representan las camas de hospital. Lo que yo quería hacer es dar a los usuarios la opción de alternar entre este usuario «vista de componentes» y un «datagrid view».

Así que he creado un panel de pnlPatients que me dan el mismo tamaño que el splitcontainer con los componentes de usuario. Cuando el usuario selecciona «Cambiar vista» el programa se supone que es para alternar entre los dos diseños.

Código:
Intento 1:

if (pnlPatients.Visible)
  pnlPatients.Hide();
else
{
  pnlPatients.Show();
  pnlPatients.BringToFront();
}

Intento 2:

pnlPatients.Visible = !pnlPatients.Visible;
pnlPatients.Invalidate();

Lo extraño es que ambos intentos trabajo como este:

El primer usuario ve el usuario «vista de componentes».
Si iba a alternar la vista, es mostrar correctamente el panel en la parte superior de la vista anterior.
Si él toggle de nuevo, a continuación, el panel correctamente podría estar oculto.
Si luego, de nuevo alternar la vista, a continuación, el panel no será mostrado. NOTA: durante la depuración, la propiedad visible del panel está correctamente cambia a TRUE o FALSE. Pero por alguna razón, solo la primera vez que se puso a la visible CIERTO que el panel pueda ser visto.

¿Alguien tiene una idea?

Saludos

Edit: también he probado este pero sin exito:

pnlPatients.Visible = !pnlPatients.Visible;
if (pnlPatients.Visible)
{
  pnlPatients.BringToFront(); 
}
else
{
  pnlPatients.SendToBack();
}
  • Y lo que es el Padre de ambos Paneles?
  • El basic de Windows forms es el padre.
InformationsquelleAutor Starceaker | 2010-09-29

5 Comentarios

  1. 2

    Echar un vistazo a este

    • Esto parece estar haciendo el truco. Mediante el uso de la Panel1Collapsed y Panel2Collapsed booleanos. Gracias!
  2. 5

    En caso de que alguien no quiere que vadear a través de todos los de Tony enlace:

    this.splitContainer.Panel2.Hide();
    this.splitContainer.Panel2Collapsed = true;
    • Ocultar el Panel2 no es necesario, creo. El colapso debería ser suficiente, aunque no lo he probado.
  3. 3
        int control =  0;
    
        private void hideShowLogToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (control == 0)
            {
                control = 1;
    
                splitContainer1.Panel2Collapsed = false;
    
                splitContainer1.Panel1Collapsed = true;
    
            }
            else if (control == 1)
            {
                control = 0;
    
                splitContainer1.Panel2Collapsed = true;
    
                splitContainer1.Panel1Collapsed = false;
            }
        }
  4. 0

    Lugar de Invalidar el Panel de control, invalidar el Host forma a la fuerza para volver a dibujar todo de los niños como bien llamando this.Invalidate(true);

    • Voy a tratar de que en un segundo, he probado añadiendo un extra de splitcontainer para ver si de alguna manera se puede ocultar o mostrar los. Con el enlace Tony proporcionada a continuación. Si eso no funciona, voy a probar esto, gracias.
  5. 0
     bool state;
        private void btn_Click(object sender, EventArgs e)
        {
            if (state)
            {
                splitContainer1.Panel1Collapsed = true;
                splitContainer1.Panel2Collapsed = false;
                state = false;
    
            }
            else
            {
                splitContainer1.Panel1Collapsed = false;
                splitContainer1.Panel2Collapsed = true;
                state = true;
    
            }
    
        }

Dejar respuesta

Please enter your comment!
Please enter your name here