Re-dessiner un panel dans un form deja charge [Résolu]

cs_egwene 54 Messages postés lundi 31 juillet 2006Date d'inscription 3 avril 2008 Dernière intervention - 3 août 2006 à 14:05 - Dernière réponse : cs_egwene 54 Messages postés lundi 31 juillet 2006Date d'inscription 3 avril 2008 Dernière intervention
- 5 août 2006 à 06:55
Salut,
voici mon petit probleme : au debut de mon application je charge un form avec un menu et un grand panel vide. Selon la navigation dans le menu, je souhaite actualiser le panel central avec le panel adapte.
Pourtant quand je clique dans mon menu il ne se passe rien.
J'ai essayer ca :

private void Menu1_Click(object sender, EventArgs e)
        {
            try
            {
                pnlMain = new UserGui(new User());
                this.Refresh();
                this.Show();   
            }
            catch (Exception exc)
            {
                txtDialogBar_frmMainAdmin.Text = exc.GetType()+ "->" + exc.Message;
            }
        }

Je rentre bien dans ma fonction car j'ai teste en y faisant afficher une messageBox mais les Refresh et autre semble sans effet.
Mon User se cree bien egalement car j'arrive a recuperer ses donnees.

Le Refresh et le Show s'adressent au form mais j'ai aussi essayer de le faire sur le panel sans un meilleur resultat. Pourtant ces proprietes devraient me re-dessiner mon form avec tous ses controls dont mon panel !

Comment dois je m'y prendre SVP ?
Afficher la suite 

Votre réponse

11 réponses

Meilleure réponse
Lutinore 3248 Messages postés lundi 25 avril 2005Date d'inscription 27 octobre 2012 Dernière intervention - 4 août 2006 à 19:12
3
Merci
En utilisant ce panel :

public class UserPanel : Panel
{
    public UserPanel( ) : base( ) { }



    public void CreateUI( User user )
    {
        this.SuspendLayout( );



        if ( this.Controls.Count > 0 )
            this.Controls.Clear( );



        // Construit la nouvelle apparence du panel.



        this.ResumeLayout( );
    }
}


tu pourras le mette à jour comme ça :



p.CreateUI( new User( ) ); // p est de type UserPanel


ou comme ça :



( ( UserPanel )this.Controls[ "MainPanel" ] ).CreateUI( new User( ) );

Merci Lutinore 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 119 internautes ce mois-ci

Commenter la réponse de Lutinore
Lutinore 3248 Messages postés lundi 25 avril 2005Date d'inscription 27 octobre 2012 Dernière intervention - 3 août 2006 à 14:29
0
Merci
Je suis pas sûr de tout bien comprendre mais..

Ton panel est dans la collection de contrôles de ta forme, ( propriété Controls ) c'est cette reference qu'il  faut modifier.

private void button1_Click( object sender, EventArgs e )
{
    Panel p = new Panel( );
    p.BackColor = Color.Azure;
    // ..


    // MainPanel est le nom du Panel ( propriété Name )
    this.Controls.RemoveByKey( "MainPanel" );
    this.Controls.Add( p );
}
Commenter la réponse de Lutinore
cs_egwene 54 Messages postés lundi 31 juillet 2006Date d'inscription 3 avril 2008 Dernière intervention - 3 août 2006 à 15:08
0
Merci
Tu m'a apporte une solution mais qui n'est pas celle que je recherche. Je fais un remove puis un add alors que je voulais rafraichir le panel existant.
La ligne :
this.Controls.RemoveByKey( "MainPanel" );
semble sans effet chez moi ???!!!
Commenter la réponse de cs_egwene
cs_Bidou 5507 Messages postés dimanche 4 août 2002Date d'inscription 20 juin 2013 Dernière intervention - 3 août 2006 à 15:13
0
Merci
C'est parce que tu n'as certainement pas de panel s'appelant MainPanel (par appelant, j'entends qui a la property Name="MainPanel")

VC# forever
Commenter la réponse de cs_Bidou
cs_Bidou 5507 Messages postés dimanche 4 août 2002Date d'inscription 20 juin 2013 Dernière intervention - 3 août 2006 à 15:34
0
Merci
Visiblement, tu devrais mettre "pnlMain" à la place....

VC# forever
Commenter la réponse de cs_Bidou
Lutinore 3248 Messages postés lundi 25 avril 2005Date d'inscription 27 octobre 2012 Dernière intervention - 3 août 2006 à 16:12
0
Merci
Pourtant j'avais anticipé cette réponse et j'avais donné la précision en commentaire :

<< MainPanel est le nom du Panel ( propriété Name ) >>

Si tu veux rafraîchir le panel dans ce cas la faut pas faire ça :

pnlMain = new UserGui(new User());

mais plutôt modifier la propriété Controls de pnlMain.
Commenter la réponse de Lutinore
cs_egwene 54 Messages postés lundi 31 juillet 2006Date d'inscription 3 avril 2008 Dernière intervention - 4 août 2006 à 05:20
0
Merci
Effectivement, j'avais bien fais attention de mettre pnlMain a la place de MainPanel mais la propriete Name n'etait pas definie ! Il etait tard, on va dire ca.(je suis pas en France pour info, il etait vraiment tard).

Par contre, pouvez vous m'expliquer a quoi sert la propriete "RemoveByKey". A ce que j'ai compris, elle enleve le panel du tableau de controls de mon form. Donc elle enleve bien mon panel MainPanel surtout que je fais un add derriere du nouveau.

Je ne peux pas initialiser mon MainPanel avec un autre panel en faisant :
pnlMain = new UserGui(new User());
puis simplement le rafraichir ?

Qu'est ce que tu veux dire par :

Si tu veux rafraîchir le panel dans ce cas la faut pas faire ça :

pnlMain = new UserGui(new User());

mais plutôt modifier la propriété Controls de pnlMain.
Commenter la réponse de cs_egwene
cs_egwene 54 Messages postés lundi 31 juillet 2006Date d'inscription 3 avril 2008 Dernière intervention - 4 août 2006 à 14:16
0
Merci
Salut,
j'attend desesperement ta reponse Lutinore. J'ai teste ta piste mais franchement je vois pas ce que tu veux dire par modifier la propriete controls de pnlMain.

Tiens moi au courant SVP, c'est un peu bourrin de faire un remove puis un add !
Commenter la réponse de cs_egwene
Lutinore 3248 Messages postés lundi 25 avril 2005Date d'inscription 27 octobre 2012 Dernière intervention - 4 août 2006 à 17:11
0
Merci
Tu as deux référence de ton panel. la première pnlMain et une seconde qui se trouve dans la collection de contrôles de ta forme ( elle y est ajoutée automatiquement par VS si tu travail avec le designer. )

Maintenant si tu fais ça :

pnlMain = new UserGui(new User());

pnlMain référence ( pointe ) vers le nouveau UserGui mais la référence qui était contenue dans la collection de contrôles de ta forme ( propriété Controls ) elle, elle référence ( pointe ) toujours vers l'ancien panel et rien n'est modifié visuellement.




Tu peux t'en convaincre avec ce code :

Panel p = new Panel( );
p.Name = "Panel1";



this.Controls.Add( p );



p = new Panel( );
p.Name = "Panel2";



// Les panels ne sont pas les mêmes.
MessageBox.Show( p.Name + " / " + this.Controls[ 0 ].Name );


Par contre si tu modifies directement les propriétes de pnlMain ( genre BackColor, Controls etc.. ) alors là oui visuellement tu verras les modifications.
Commenter la réponse de Lutinore
cs_egwene 54 Messages postés lundi 31 juillet 2006Date d'inscription 3 avril 2008 Dernière intervention - 4 août 2006 à 17:36
0
Merci
Salut, merci pour ta reponse.

Je vois ce que tu veux dire. Du coup, au lieu de creer une nouvelle reference, j'ai essayer d'ecraser la premiere (celle de mon MainPanel) comme ceci :
this.Controls[IndicePanel] = new UserGui(new User( ));
UserGui derivant de panel evidemment !
 
Mais la propriété est en lecture seule !!! je me suis faite jeter !

Donc y-a t'il un moyen plus leger que Remove + Add pour modifier une des reference de la collection
Commenter la réponse de cs_egwene
cs_egwene 54 Messages postés lundi 31 juillet 2006Date d'inscription 3 avril 2008 Dernière intervention - 5 août 2006 à 06:55
0
Merci
Salut Lutinore,

cela me semble une bonne piste, j'ai pas mon code sous les yeux mais je testerai ça dès que possible.
Merci pour ton aide en tout cas, j'espère que j'arriverai à l'adapter car j'ai plusieurs classes différentes dérivées de panel, ... enfin bref c'est pas si simple.
Commenter la réponse de cs_egwene

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.