2017-05-12 3 views
0

J'ai 4 panneaux (les uns au-dessus des autres). Je veux cacher tous les panneaux et montrer l'un d'eux en fonction du bouton cliqué. Lorsque je lance l'application et que je clique sur le bouton, tous les panneaux sont masqués mais le panneau ne s'affiche pas. Qu'est-ce que je fais mal?Affichage et masquage des panneaux sur le bouton cliquez sur C#

Voici mon code:

namespace Detailing 
{ 
public partial class MainForm : Form 
{ 
    public void hidePanels() 
    { 
     welcomePanel.Width = 0; 
     homePanel.Width = 0; 
     historyPanel.Width = 0; 
     savePanel.Width = 0; 
    } 
    public MainForm() 
    { 
     InitializeComponent(); 
     Load += new EventHandler(MainForm_Load); 
    } 
    private void MainForm_Load(object sender, EventArgs e) 
    { 
     hidePanels(); 
     welcomePanel.Width = 1306; 
    } 

    private void homeButton_Click(object sender, EventArgs e) 
    { 
     hidePanels(); 
     homePanel.Width = 1306; 
    } 
} 
} 

post-scriptum j'ai essayé d'utiliser welcomePanel.Hide(); et homePanel.Show(); et cela n'a pas fonctionné. J'ai aussi essayé d'utiliser welcomePanel.Visible = false; et homePanel.Visible = true; mais malheureusement, cela n'a pas fonctionné aussi bien.

+2

Vous devez être sûr de ne pas avoir inclus un panneau à l'intérieur d'un autre panneau. En d'autres termes, aucun panneau ne devrait être un enfant d'un autre panneau, sinon cacher le parent cache également les enfants. – Steve

+0

Basé sur les noms, il me semble que ceux-ci devraient vraiment être des formes différentes au lieu de panneaux imbriqués. – PoweredByOrange

+2

Ne jouez pas avec la largeur, mais faites simplement l'invisible: 'yadayada.Visible = true/false:' Aussi: Mettez-les dans une liste de sorte que vous pouvez faire une boucle sur eux! Bien sûr, ça va marcher. Mais, oui, ils ne doivent pas être imbriqués. Pour éviter cela, déplacez-les sur le code ou avec le clavier (!!!!) mais pas avec la souris (!!!!!!!) – TaW

Répondre

1

Un Panel est un conteneur de contrôle. Cela signifie que si (en utilisant le concepteur) vous avez déplacé un panneau sur la surface d'un autre panneau, il devient un enfant du panneau sous-jacent. Vous pouvez facilement voir ce fait lorsque vous essayez de déplacer le panneau sous-jacent. Tous les enfants bougent ensemble.

Vous pouvez dessiner votre panneau dans une position différente du formulaire et n'en conserver qu'un seul comme espace réservé pour tous les autres panneaux. Lorsque vous chargez le formulaire ou dans le constructeur de formulaire, vous pouvez déplacer par code les autres panneaux dans le même emplacement du panneau de référence.

Ainsi, en supposant welcomePanel est le panneau de référence, vous pouvez écrire:

public partial class MainForm : Form 
{ 
    public void hidePanels() 
    { 
     welcomePanel.Visible = false; 
     homePanel.Visible = false; 
     historyPanel.Visible = false; 
     savePanel.Visible = false; 
    } 
    public MainForm() 
    { 
     InitializeComponent(); 
     Load += new EventHandler(MainForm_Load); 
     homePanel.Location = welcomePanel.Location; 
     historyPanel.Location = welcomePanel.Location; 
     savePanel.Location = welcomePanel.Location;   
    } 
    private void MainForm_Load(object sender, EventArgs e) 
    { 
     hidePanels(); 
     welcomePanel.Visible = true; 
    } 

    private void homeButton_Click(object sender, EventArgs e) 
    { 
     hidePanels(); 
     homePanel.Visible = true; 
    } 
    ..... and so on ... 

} 

Une autre approche consiste à utiliser un TabControl et afficher/cache TabPage que vous avez besoin

+0

Votre méthode a fonctionné. Je suppose que le problème était que j'ai ajouté le deuxième panneau à l'intérieur du premier. Merci beaucoup pour votre réponse détaillée, c'était très utile. –