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

Windows Forms Discussion :

Comment redimensionner le contenu d'une fentre lorsque la fenetre est agrandit


Sujet :

Windows Forms

  1. #1
    Membre à l'essai
    Inscrit en
    Février 2007
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 10
    Points : 13
    Points
    13
    Par défaut Comment redimensionner le contenu d'une fentre lorsque la fenetre est agrandit
    Bonjour,

    je suis débutant avec les winforms et je travaille avec c# (visual 2008) et j'aimerais bien savoir comment gérer le contenu d'une winform lorsqu'elle est agrandit.
    lorsque j'ai utilisée le propriété anchor pour un contrôle et lorsque s'agrandit la fenêtre le contrôle reste colle a la fenêtre mais avec la même distance de top, left, right, bottom donc le contrôle est trop agrandit.

    Donc comment gérer le rédemensionnement de contenu d'un controle en fonvtion de la taille de fenetre.

  2. #2
    Membre extrêmement actif Avatar de fally
    Homme Profil pro
    Développeur .Net / BI
    Inscrit en
    Novembre 2007
    Messages
    966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur .Net / BI

    Informations forums :
    Inscription : Novembre 2007
    Messages : 966
    Points : 1 173
    Points
    1 173
    Par défaut
    Avec les Anchors; mais faut savoir les utiliser. on peut associer les propriétés tof, left....c'est à soi-même de voir

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Il y a la propriété Dock qui permet d'indiquer qu'un contrôle reste collé sur un bord de son conteneur, ou occupe tout l'espace disponible.
    La propriété Anchor permet de rendre fixe la distance entre un bord d'un contrôle et le bord de son conteneur

  4. #4
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 387
    Points : 2 999
    Points
    2 999
    Par défaut
    Je dirais avec un TableLayoutPanel bien manié ...
    Mais il faut connaitre la disposition de tous les contrôles avant d'utiliser ce truc là et éviter d'en rajouter après coup, sinon, c'est la galère.

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par Papy214 Voir le message
    Je dirais avec un TableLayoutPanel bien manié ...
    Mais il faut connaitre la disposition de tous les contrôles avant d'utiliser ce truc là et éviter d'en rajouter après coup, sinon, c'est la galère.
    J'ai essayé plusieurs fois d'utiliser ce truc là, et j'en ai conclu que c'était totalement pourri et inutilisable (sauf à la rigueur pour une form de taille fixe)
    Le FlowLayoutPanel ne vaut pas beaucoup mieux...

  6. #6
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 387
    Points : 2 999
    Points
    2 999
    Par défaut
    En fait, il faut le voir je pense comme une table HTML avec tous les colspan et rowspan possibles. Et surtout bien se gaffer des types de redimensionnement des lignes et colonnes. Après, ça va encore. Mais j'avoue que c'est un peu pénible à utiliser. Malheureusement, je n'ai pas encore trouver d'autre solution simple, à part se payer tous les redimensionnements par code dans le OnEndResize

  7. #7
    Membre émérite Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Points : 2 925
    Points
    2 925
    Par défaut
    Citation Envoyé par tomlev Voir le message
    J'ai essayé plusieurs fois d'utiliser ce truc là, et j'en ai conclu que c'était totalement pourri et inutilisable
    Ah ? Pourtant, en jouant sur l'autosize des colonnes, sur le mode en % / le mode fixe, en définissant des ColSpan, ont peut faire beaucoup de chose. J'ai jamais été bloqué par un TableLayoutPanel, pour l'instant
    ಠ_ಠ

  8. #8
    Membre à l'essai
    Inscrit en
    Février 2007
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 10
    Points : 13
    Points
    13
    Par défaut
    Salut les amies,


    J’ai passé un bon temps à chercher une solution au problème de réorganisation et de redimensionnent des contrôles dans un formulaire et j’ai pas trouvé grand, car même les propriétés Dock et Anchor ne résout pas le problème.

    Pour cela j’ai pensé a gérer moi-même le problème de redimensionnent et voila ma solution que j’espère quelle va aider beaucoup.

    Voila le WinForm sur le qu’elle on va travailler dans ce petit tuto.



    Le problème lorsqu’on agrandit la fenêtre les contrôles préservent les dimensions et les positions initiales.



    La solution est de calculer le rapport entre la taille initiale de la fenêtre et la nouvelle taille après l’agrandissement de la fenêtre. Puis on va appliquer ce rapport à tous les contrôles de notre formulaire.

    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
    public partial class Form1 : Form
        {
            int Largeur; // La largeur de la From
            int Hauteur; // L'hauteur de la From
     
            .
    	  .
    	  .
            private void Form1_Load(object sender, EventArgs e)
            {
    		// captirer les dimensions de la fenetre
                Largeur = this.Size.Width;
                Hauteur = this.Size.Height;
            }
     
            .
    	  .
    	  .
        }
    Pour la winform on définit deux variables Hauteur et Largeur pour enregistrer le hauteur et la largeur initiale de la form.

    Puis on intercepte l’évenement Resize pour réorganiser et redimmensionner les controles*:

    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
    22
    23
    24
    25
    26
    27
    private void Form1_Resize(object sender, EventArgs e)
            {
                // calculer le rapport entre la nouvelle et l'ancienne dimension 
                float X = (float) this.Size.Width / Largeur;
                float Y = (float) this.Size.Height / Hauteur;
     
                // groupBox1
     
                this.groupBox1.Location = new System.Drawing.Point( (int) (X * 12), (int) (Y * 12)); // déplacer le controle
                this.groupBox1.Size = new System.Drawing.Size((int)(X * 400), (int)(Y * 244)); // redimensionner le control
     
                // button1
     
                this.button1.Location = new System.Drawing.Point((int) (X * 91), (int)(Y * 198));
                this.button1.Size = new System.Drawing.Size( (int) (X * 210), (int) (Y * 23));
     
                // textBox1
     
                this.textBox1.Location = new System.Drawing.Point( (int) (X * 91), (int) (Y * 148));
                this.textBox1.Size = new System.Drawing.Size( (int) (X * 210), (int) (Y * 20));
     
                // pictureBox1
     
                this.pictureBox1.Location = new System.Drawing.Point( (int) (X * 68), (int) (Y * 19) );
                this.pictureBox1.Size = new System.Drawing.Size( (int) (X * 275), (int) (Y * 110));
     
            }
    Maintenant on clacule le rapport entre la hauteur iniatiale et apres agrandissement et parreille pour la largeur, puis on redefinit pour chaque contrôle la nouvelle position (réorganisation) et la nouvelle dimension (redimensionnement).

    Je sais bien que ca ce voit tres compliquer de redéfinir tout les contrôles. Mais voila ma petite solution peut gagner d temps et pour ne pas trop casser la tete.

    Simplement on consulte la methode InitializeComponent dans la quelle seront définit toutes les composant de form, et on selectionne la partie ou sont définit nos controles, puis un petit copier/coller dans notre methodes Form_Resize(), puis pour chaque contrôle on ne laisse que les deux lignes pour definir la nouvelle position et dimension.

    new System.Drawing.Point(x, y);
    new System.Drawing.Size(x, y);

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    private void InitializeComponent()
            {
                .
    		.
    		.
                // 
                // groupBox1
                // 
                this.groupBox1.Controls.Add(this.pictureBox1);
                this.groupBox1.Controls.Add(this.textBox1);
                this.groupBox1.Controls.Add(this.button1);
                this.groupBox1.Location = new System.Drawing.Point(12, 12);
                this.groupBox1.Name = "groupBox1";
                this.groupBox1.Size = new System.Drawing.Size(400, 244);
                this.groupBox1.TabIndex = 0;
                this.groupBox1.TabStop = false;
                this.groupBox1.Text = "Test";
                // 
                // button1
                // 
                this.button1.Location = new System.Drawing.Point(91, 198);
                this.button1.Name = "button1";
                this.button1.Size = new System.Drawing.Size(210, 23);
                this.button1.TabIndex = 0;
                this.button1.Text = "Button de Test";
                this.button1.UseVisualStyleBackColor = true;
                this.button1.Click += new System.EventHandler(this.button1_Click);
                // 
                // textBox1
                // 
                this.textBox1.Location = new System.Drawing.Point(91, 148);
                this.textBox1.Name = "textBox1";
                this.textBox1.Size = new System.Drawing.Size(210, 20);
                this.textBox1.TabIndex = 1;
                // 
                // pictureBox1
                // 
                this.pictureBox1.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox1.Image")));
                this.pictureBox1.Location = new System.Drawing.Point(68, 19);
                this.pictureBox1.Name = "pictureBox1";
                this.pictureBox1.Size = new System.Drawing.Size(275, 110);
                this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
                this.pictureBox1.TabIndex = 2;
                this.pictureBox1.TabStop = false;
                // 
                .
    		.
    		.
            }
    Et on enfin on a résout ce problème qui va donner beaucoup de beaute a nos applications WinForms.

    Et voila le résultat*:


  9. #9
    Membre émérite Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Points : 2 925
    Points
    2 925
    Par défaut
    J'ai pas Visual studio sous la main, mais :
    • en mettant le group box en dock fill,
    • un tablelayout panel a l'interieur en DockFill aussi, avec une seule colonne et trois lignes : la premiere en % (80%), la deuxieme en autosize (pour le textbox, de hauteur fixe), le troiseme en % aussi (20)
    • en mettant l'image dans la premiere case en autosize et groworshrink = true, la textbox dans le deuxieme pareil, et le bouton dans le troisieme pareil, on a exactement le meme resultat sans rien coder


    Perso, j'ai jamais eu besoin de toucher a la main a la taille des controles. Anchor, Dock, AutoSize et AutoSizeMode suffisent dans 99.99% des cas
    ಠ_ಠ

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 29/11/2012, 17h28
  2. Réponses: 14
    Dernier message: 19/02/2012, 22h25
  3. Comment copier le contenu d'une fenêtre dos
    Par Tragan dans le forum Scripts/Batch
    Réponses: 5
    Dernier message: 24/12/2009, 16h13
  4. [C#] Imprimer le contenu d'une fenêtre avec ascenseur
    Par biglong dans le forum Windows Forms
    Réponses: 6
    Dernier message: 06/08/2007, 23h29
  5. Comment effacer le contenu d'une scrollbox???
    Par Leclair2000 dans le forum C++Builder
    Réponses: 2
    Dernier message: 01/07/2004, 16h34

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