2010-09-29 7 views
3

J'ai un écran divisé par quelques conteneurs fractionnés. L'un d'eux contient des rectangles dont j'ai fait les composants utilisateur, ces "rectangles" représentent des lits d'hôpitaux. Ce que je voulais faire, c'est donner aux utilisateurs la possibilité de basculer entre cette "vue des composants utilisateur" et une "vue DataGrid". J'ai donc créé un panneau pnlPatients que je donne la même taille que le splitcontainer avec les composants de l'utilisateur. Lorsque l'utilisateur sélectionne "Modifier vue", le programme est supposé basculer entre les deux dispositions.C# masquage et affichage d'un panneau au-dessus d'un conteneur fractionné

code: Tentative 1:

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

Tentative 2:

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

La chose étrange est que les deux tentatives fonctionnent comme ceci:

L'utilisateur voit d'abord le « composant utilisateur vue". S'il basculait la vue, il afficherait correctement le panneau au-dessus de la vue précédente. S'il voulait basculer à nouveau, alors le panneau serait correctement caché. S'il souhaite de nouveau basculer la vue, le panneau ne sera pas affiché. À FAIRE: lors du débogage, la propriété visible du panneau est correctement définie sur TRUE ou FALSE. Mais pour une raison seulement la première fois qu'il est mis à VRAI visible le panneau peut être vu.

Est-ce que quelqu'un a une idée?

Meilleures salutations

Edit: J'ai aussi essayé cela, mais à aucun succès:

pnlPatients.Visible = !pnlPatients.Visible; 
if (pnlPatients.Visible) 
{ 
    pnlPatients.BringToFront(); 
} 
else 
{ 
    pnlPatients.SendToBack(); 
} 
+0

Et quel est le parent des deux panneaux? –

+0

Le formulaire Windows de base est le parent. – Starceaker

Répondre

2

Jetez un oeil à this

+0

Cela semble faire l'affaire. En utilisant les booléens Panel1Collapsed et Panel2Collapsed. Merci! – Starceaker

0

au lieu de vicier le contrôle du Groupe spécial, invalider le formulaire d'hôte pour le forcer à redessiner l'ensemble de ses enfants ainsi en appelant this.Invalidate(true);

+0

Je vais essayer cela dans une seconde, j'ai maintenant essayé d'ajouter un splitcontainer supplémentaire pour voir si je peux en quelque sorte cacher ou montrer ceux-ci. Avec le lien Tony fourni ci-dessous. Si ça ne marche pas, je vais essayer, merci. – Starceaker

5

au cas où quelqu'un ne veut pas patauger dans tout le lien de Tony:

this.splitContainer.Panel2.Hide(); 
this.splitContainer.Panel2Collapsed = true; 
+0

Cacher Panel2 n'est pas nécessaire je pense. L'effondrement devrait être suffisant, même si je n'ai pas testé. –

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; 
     } 
    } 
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; 

     } 

    }