Ouvrir form dans Panel [Résolu]

Signaler
Messages postés
9
Date d'inscription
jeudi 16 juin 2011
Statut
Membre
Dernière intervention
25 avril 2012
-
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
-
Bonjour à tous,

Je développe une petite application sous Visual Studio en C# et je n'arrive pas à ouvrir une form dans un panel.
Je m'explique : J'ai une form Main qui contient panel1 et panel2. Dans le panel1 j'affiche une form Menu avec ce code :

WMenu Form1 = new WMenu();
Form1.TopLevel = false;
Form1.FormBorderStyle = FormBorderStyle.None;
Form1.Parent = splitContainer2.Panel1;
Form1.Top = 0;
Form1.Left = 0;
Form1.Size = splitContainer2.Panel1.ClientSize;
Form1.Dock = DockStyle.Fill;
Form1.BringToFront();
Form1.Show();

La form Menu est un treeview avec différents noeud. Ce que je voudrais faire c'est après un clique sur les noeud enfant afficher les form correspondante au noeud dans le Panel2 de la form Main.
J'espère avoir été clair dans mes explication.
Quelqu'un aurait une solution a me proposer ? :-)

11 réponses

Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
36
et bien, le plus simple et ce que je fais habituellement, c'est de stocker la référence vers le control dans le Tag du Node.

private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
{
   var control = treeView1.SelectedNode.Tag as Control;
   if (control == null) {
      return;
   }

   control.Dock = DockStyle.Fill;
   this.splitPanel.Panel2.Clear();
   this.splitPanel.Panel2.Add(control);
   control.Focus();
}


et quand tu crées tes Nodes, tu procèdes ainsi :

var node = new Node("Fabric");
node.Tag = new WFabric();
treeView.Nodes.Add(node);



Sébastien FERRAND
Ingénieur Concepteur Senior
Microsoft Visual C# MVP 2004 - 2009
Blog Photo
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
36
Hello,

Quel est le type WMenu ?
De quoi il dérive ?


Sébastien FERRAND
Ingénieur Concepteur Senior
Microsoft Visual C# MVP 2004 - 2009
Blog Photo
Messages postés
9
Date d'inscription
jeudi 16 juin 2011
Statut
Membre
Dernière intervention
25 avril 2012

WMenu est un simple Windows form ou j'ai mis un treeview avec 3noeuds parents, pour ouvrir les forms à partir des noeuds enfants j'ai fait comme ça :
private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
        {
            if (treeView1.SelectedNode == treeView1.Nodes[0].Nodes[0])
            {
                WFabric form2 = new WFabric();
                form2 .Show();
            }
            if (treeView1.SelectedNode == treeView1.Nodes[0].Nodes[1])
            {
                WReport form3 = new WReport();
                form3 .Show();
            }
            if (treeView1.SelectedNode == treeView1.Nodes[1].Nodes[0])
            {
                WSuiviFab form4 = new WSuiviFab();
                form4 .Show();
            }
            if (treeView1.SelectedNode == treeView1.Nodes[1].Nodes[1])
            {
                WExped form5  = new WExped();
                form5 .Show();
            }
            if (treeView1.SelectedNode == treeView1.Nodes[2].Nodes[0])
            {
                WStock form6  = new WStock();
                form6 .Show();
            }

Mais pour les ouvrir dans le Panel2 de la form Main aucune idée ^^.
Il faut utiliser un type de form spécial pour faire ça?
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
36
tu ne peux pas "inclure" une forme dans une autre... pour faire cela, il faut que tu utilises un UserControl.


Sébastien FERRAND
Ingénieur Concepteur Senior
Microsoft Visual C# MVP 2004 - 2009
Blog Photo
Messages postés
9
Date d'inscription
jeudi 16 juin 2011
Statut
Membre
Dernière intervention
25 avril 2012

Donc je remplace mon WMenu par un user control?
et toutes les forms lié aux noeuds enfants aussi?
Par contre je vois toujours pas comment spécifier l'affichage dans le panel 2 du Main après un clique sur les noeud :-s
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
36
pour l'ajouter au panel2 :

splitPanel.Panel2.Controls.Clear();
splitPanel.Panel2.Controls.Add(wpMenu);



Sébastien FERRAND
Ingénieur Concepteur Senior
Microsoft Visual C# MVP 2004 - 2009
Blog Photo
Messages postés
9
Date d'inscription
jeudi 16 juin 2011
Statut
Membre
Dernière intervention
25 avril 2012

Oui ça c'est pour afficher wmenu dans panel2.
Je me suis peu être mal exprimer. Ce que je veux c'est par exemple au moment du clique sur le noeud enfant1 qui est dans le noeud parent1, il faut que la form lié au noeud enfant1 s'affiche dans le panel du Main et non séparément. :s
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
36
je ne sais pas si j'ai bien compris...

Tu veux que lorsque tu cliques sur un feuille du TreeView que le controle correspondant s'affiche dans Panel2 ?


Sébastien FERRAND
Ingénieur Concepteur Senior
Microsoft Visual C# MVP 2004 - 2009
Blog Photo
Messages postés
9
Date d'inscription
jeudi 16 juin 2011
Statut
Membre
Dernière intervention
25 avril 2012

oui, si feuille = node c'est ça ^^
Messages postés
9
Date d'inscription
jeudi 16 juin 2011
Statut
Membre
Dernière intervention
25 avril 2012

Yeah !! Merci beaucoup pour ton aide.


Dernière petite question. Y a t-il une propriété qui peut redimensionner automatiquement ma form WFabric en fonction de la taille de mon Panel2 ??
Car j'ai mis "Autosize" à true mais sa n'a pas l'air d'être ça
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
36
Normalement, la propriété Dock doit s'en charger... mais il faut que les contrôles de WFabric s'adapte à leur UserControl (Propriété Anchor et Dock)


Sébastien FERRAND
Ingénieur Concepteur Senior
Microsoft Visual C# MVP 2004 - 2009
Blog Photo