IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Comment récupérer la hauteur d'un panel qui est en DockStyle Fill ?


Sujet :

C#

  1. #1
    Membre habitué Avatar de stephane.julien
    Inscrit en
    Septembre 2007
    Messages
    342
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Septembre 2007
    Messages : 342
    Points : 130
    Points
    130
    Par défaut Comment récupérer la hauteur d'un panel qui est en DockStyle Fill ?
    Bonjour,

    J'ai un panel auquel j'aimerais ajouter deux ListBox ayant chacune la moitié de la hauteur du panel. Une liste occupe la moitié dau haut et l'autre liste la moitié du bas. La taille de mon panel change en fonction de la taille de la fenêtre.

    Voici le constructeur de mon panel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    public MyPanel()
        {
          this.Dock = DockStyle.Fill;
     
          EnabledListBox = new CheckedListBox();
          EnabledListBox.ScrollAlwaysVisible = true;
          EnabledListBox.Dock = DockStyle.Top;
          EnabledListBox.Height = base.Size.Height / 2;
          EnabledListBox.Sorted = true;
     
          DisabledListBox = new ListBox();
          DisabledListBox.ScrollAlwaysVisible = true;
          DisabledListBox.Enabled = false;
          DisabledListBox.Dock = DockStyle.Top;
          DisabledListBox.Height = base.Size.Height / 2;
          DisabledListBoxs.Sorted = true;
     
          this.Controls.Add(DisabledListBoxs);
          this.Controls.Add(EnabledListBox);
        }
    De plus, y a-t-il un moyen dae faire fonctionner la ScrollBar dans ma ListBox Disabled?

    Merci de votre aide

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    si this.height ne suffit pas, et vu que tu es en fill, this.parent.height doit aller

    sinon pour l'ascenseur sur un objet disabled, ca me parait un peu contradictoire
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre habitué Avatar de stephane.julien
    Inscrit en
    Septembre 2007
    Messages
    342
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Septembre 2007
    Messages : 342
    Points : 130
    Points
    130
    Par défaut
    Le problème c'est que quand je passe dans le contructeur, mon panel n'a pas encore été ajouté à un Parent. Donc le code que tu m'as donné renvoie une NullReferenceException...

  4. #4
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    ah ok

    je comprenais pas pourquoi tu cherchais autre chose que this.height
    maintenant je comprends mieux
    dans le new this.height retourne 0 car il n'est pas encore initialisé

    donc le mieux est de déporté la partie initialisation graphique de ton panel dans l'évènement handlecreated (parentchanged pourrait aussi aller)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre habitué Avatar de stephane.julien
    Inscrit en
    Septembre 2007
    Messages
    342
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Septembre 2007
    Messages : 342
    Points : 130
    Points
    130
    Par défaut
    Citation Envoyé par sperot51 Voir le message
    ah ok

    je comprenais pas pourquoi tu cherchais autre chose que this.height
    maintenant je comprends mieux
    dans le new this.height retourne 0 car il n'est pas encore initialisé

    donc le mieux est de déporté la partie initialisation graphique de ton panel dans l'évènement handlecreated (parentchanged pourrait aussi aller)

    ouhlaaa, peux-tu m'éclaircir cette phrase stp? Il faut que j'ajoute un événement à mon panel du style handlecreated et c'est là dedans que je spécifie la hauteur de mes listes?

  6. #6
    Membre habitué Avatar de stephane.julien
    Inscrit en
    Septembre 2007
    Messages
    342
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Septembre 2007
    Messages : 342
    Points : 130
    Points
    130
    Par défaut
    Excuse-moi, je n'ai même pas cherché avant de te harceler. J'ai essayé ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
          this.HandleCreated += new EventHandler(MyPanel_SetListSize);
          this.SizeChanged += new EventHandler(MyPanel_SetListSize);
    De cette manière, lorsque je redimmensionne ma fenêtre, la taille des listes est automatiquement modifiée. Voici ma méthode SetListSize :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    EnabledList.Height = this.Parent.Height / 2;
    DisabledList.Height = this.Parent.Height / 2;
    Merci beaucoup pour ton aide!

  7. #7
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    si tu es branché sur sizechanged, ca ne sert pas de te brancher sur handlecreated, vu que quand la taille va passer de 0 à la taille réelle après que le handle soit créé ca va passer dans ton code qui gère la taille


    par contre pour les évènement de l'objet sur lequel tu travailles (this) microsoft conseille d'overrider la méthode de l'évènement plutot que de le t'intercepter via un eventhandler qui est moins performant

    par contre je developpe en vb et ca donnerait ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public sub overrides OnSizeChanged(parametres_de_onsizechanged)
        mybase.OnSizeChanged(parametres_de_onsizechanged) // => cette ligne raise l'event pour les abonnés via les eventhandler
    end sub
    ton code tu le mets soit avant soit après le mybase, ca dépend de ce que tu fais
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  8. #8
    Membre habitué Avatar de stephane.julien
    Inscrit en
    Septembre 2007
    Messages
    342
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Septembre 2007
    Messages : 342
    Points : 130
    Points
    130
    Par défaut
    ok merci pour l'info. En effet avec la solution que tu donnes, plus besoin d'enregistrer un nouveau EventHandler, donc c'est mieux et ca marche tout aussi bien. voilà le code en c# :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    protected override void OnSizeChanged(EventArgs e)
        {
          base.OnSizeChanged(e);
          EnabledList.Height = this.Parent.Height / 2;
          DisabledList.Height = this.Parent.Height / 2;
        }
    Et le tour est joué!
    Encore merci pour ces bonnes informations!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 9
    Dernier message: 08/11/2010, 17h12
  2. Réponses: 11
    Dernier message: 15/10/2010, 12h43
  3. Comment récupérer un signal durant un exe qui s'exécute?
    Par sabrinacorse dans le forum LabVIEW
    Réponses: 1
    Dernier message: 28/07/2009, 14h40
  4. Réponses: 2
    Dernier message: 16/03/2007, 16h26
  5. Réponses: 1
    Dernier message: 11/09/2006, 11h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo