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 :

Bordure d'un formulaire enfant MDI maximisé


Sujet :

Windows Forms

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 30
    Points : 22
    Points
    22
    Par défaut Bordure d'un formulaire enfant MDI maximisé
    Bonjour, je vous expose mon problème:
    J'utilise un Form MDI parent pouvant contenir des Form enfants.
    Mon souci se produit lorsque le formulaire parent et le formulaire enfant sont maximisés : la bordure droite du Form enfant est encore visible (et c'est moche). Comment faire pour s'en débarrasser?

    Voici le code du Form parent :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
                this.IsMdiContainer = true;
                this.WindowState = FormWindowState.Maximized;
                Form2 f2 = new Form2();
                f2.MdiParent = this;
                f2.Show();
                //f2.WindowState = FormWindowState.Maximized;
            }
        }
    et du Form enfant (le code par défaut généré par visual studio):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
        public partial class Form2 : Form
        {
            public Form2()
            {
                InitializeComponent();
            }
        }
    Le bug se produit en maximisant la fenêtre enfant.

    Et encore plus bizarre : en décommentant la dernière ligne de la classe Form1, je me retrouve avec deux jeux de boutons réduire/minimiser/fermer

    Si quelqu'un voit une explication et/ou a une solution je l'en remercie par avance

  2. #2
    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 Lychar Voir le message
    J'utilise un Form MDI parent pouvant contenir des Form enfants.
    Mon souci se produit lorsque le formulaire parent et le formulaire enfant sont maximisés : la bordure droite du Form enfant est encore visible (et c'est moche). Comment faire pour s'en débarrasser?
    Bizarre, j'ai pas ça chez moi (Vista SP1, .NET 3.5 SP1)

    Citation Envoyé par Lychar Voir le message
    Et encore plus bizarre : en décommentant la dernière ligne de la classe Form1, je me retrouve avec deux jeux de boutons réduire/minimiser/fermer
    Oh, joli bug
    Effectivement, je le reproduis chez moi aussi... Je pense que comme tu affiches et agrandit le formulaire enfant avant même que le formulaire parent soit créé, il perd un peu les pédales... Si tu déplaces la création du formulaire enfant dans le Load, le problème disparait

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 30
    Points : 22
    Points
    22
    Par défaut
    Merci pour ta réponse tomlev.
    Peut-être une piste du côté du framework utilisé alors.
    Perso j'ai Vista SP1 aussi, et visual studio 2005 qui ne fonctionne apparemment qu'avec le .NET framework 2.0 (j'ai bien la version 3.5 SP1 d'installée mais VS ne veut rien savoir; le bougre!).
    Y'a t-il un moyen de compiler en utilisant le 3.5 ? (je n'ai pas une folle envie de payer une licence VS2008 pour une bordure )

  4. #4
    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
    Non mais en fait je ne pense pas que ce soit lié au framework, Windows Forms n'a pas changé depuis la version 2.0.

    Tu peux envoyer un screenshot pour montrer ce que tu obtiens ?

    (par contre je pourrai pas regarder avant lundi soir...)

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 30
    Points : 22
    Points
    22
    Par défaut
    voila ce que j'obtiens :


    La bordure que l'on voit à droite est censé disparaître quand la fenêtre est en plein écran, comme le fait la bordure de gauche.

  6. #6
    Membre éprouvé Avatar de sisqo60
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2006
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 754
    Points : 1 188
    Points
    1 188
    Par défaut
    Citation Envoyé par Lychar Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
                this.IsMdiContainer = true;
                this.WindowState = FormWindowState.Maximized;
                Form2 f2 = new Form2();
                f2.MdiParent = this;
                f2.Show();
                //f2.WindowState = FormWindowState.Maximized;
            }
        }
    salut,
    je ne suis pas sur à 200 % de ce que je vais te dire mais d'après les tests que j'ai fais ça fonctionne...
    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
     
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
                this.IsMdiContainer = true;
                this.WindowState = FormWindowState.Maximized;
                Form2 f2 = new Form2();
                f2.MdiParent = this;           
                f2.WindowState = FormWindowState.Maximized;
                f2.Show();
     
            }
        }
    si tu mets f2.WindowState = FormWindowState.Maximized; avant l'affichage c'est bon...
    Un âne se croit savant parce qu'on le charge de livres (proverbe américain)

    N'oubliez pas de avant de
    Pas de question techniques par MP, c'est contre la philosophie du forum

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 30
    Points : 22
    Points
    22
    Par défaut
    Merci sisqo60 de t'intéresser aussi à mon cas,
    Hélas avec ton code j'ai toujours mon problème de bordure, et du double jeu de boutons (ce dernier n'est d'ailleurs plus un problème car comme dit tomlev, il suffit de maximiser à un autre moment).

    Le truc qui m'intrigue c'est que vous n'arriviez pas à reproduire le bug. je vais essayer de dénicher un autre windows pour tester

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 30
    Points : 22
    Points
    22
    Par défaut
    Bon, après tests sur deux autres postes avec vista, le bug n'apparaît pas
    Je suis partagé entre le fait de me creuser la tête pour trouver d'où ça peut provenir d'une part, et espérer que le bug sera absent des postes client d'autre part

  9. #9
    Membre éprouvé Avatar de sisqo60
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2006
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 754
    Points : 1 188
    Points
    1 188
    Par défaut
    le double jeu de boutons c'est plutôt normal!
    Dans le sens où le parent a ses propres boutons et que l'enfant aussi.
    Pour ma part je suis toujours et encore sous ce bon vieux xp et je n'ai pas trop à m'en plaindre. Plus qu'une solution : croises les doigts...
    Un âne se croit savant parce qu'on le charge de livres (proverbe américain)

    N'oubliez pas de avant de
    Pas de question techniques par MP, c'est contre la philosophie du forum

  10. #10
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 195
    Points
    5 195
    Par défaut
    salut

    c'est une question "classique" en MDI.

    Pour résoudre cela, il faut aller "trapper" le CreateParams de ta form, et mettre la valeur qui convient (mais je m'en souviens plus bien sur de cette valeur)


    En faisant une recherche dans le monde du C++/MFC, tu devrais trouver l'info exacte et ensuite, pouvoir faire le nécessaire pour virer le "double" bouton fermer de ta form
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

  11. #11
    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 sisqo60 Voir le message
    le double jeu de boutons c'est plutôt normal!
    Dans le sens où le parent a ses propres boutons et que l'enfant aussi.
    Non, c'est pas ça le problème... le problème c'est que la form MDI enfant a 2 jeux de boutons, en plus de ceux de la form parent ! Et ça c'est clairement un bug il me semble...

    Par contre, pour le problème de la bordure je vois pas trop, vu que ça marche sans problème chez moi

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 30
    Points : 22
    Points
    22
    Par défaut
    Bon, je vais pouvoir ajouter ce bug à la liste (form MDI enfant qui conserve l'icône par défaut lorsqu'elle est maximisée et qui reprend l'icône personnalisée après réduction/agrandissement... Bordure des DataGridView qui ne s'agrandissent pas quand le DGV s'agrandit...).
    pour l'instant j'avance sans trop d'inquiétude, on dirait que seul mon poste produit ce bug de bordure; allez savoir ce qui se produit dans son p'tit crâne
    Merci à vous en tout cas. Si je découvre du nouveau par la suite, je vous tiendrai informé.

  13. #13
    Membre éprouvé Avatar de sisqo60
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2006
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 754
    Points : 1 188
    Points
    1 188
    Par défaut
    une simple demande :

    Peut tu montrer le code du constructeur de form2 stp...
    Un âne se croit savant parce qu'on le charge de livres (proverbe américain)

    N'oubliez pas de avant de
    Pas de question techniques par MP, c'est contre la philosophie du forum

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 30
    Points : 22
    Points
    22
    Par défaut
    Voici le code généré par visual studio :

    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
     
    partial class Form2
    {
        /// <summary>
        /// Variable nécessaire au concepteur.
        /// </summary>
        private System.ComponentModel.IContainer components = null;
     
        /// <summary>
        /// Nettoyage des ressources utilisées.
        /// </summary>
        /// <param name="disposing">true si les ressources managées doivent être supprimées*; sinon, false.</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }
     
        #region Code généré par le Concepteur Windows Form
     
        /// <summary>
        /// Méthode requise pour la prise en charge du concepteur - ne modifiez pas
        /// le contenu de cette méthode avec l'éditeur de code.
        /// </summary>
        private void InitializeComponent()
        {
            this.components = new System.ComponentModel.Container();
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.Text = "Form2";
        }
     
        #endregion
    }
    Rien de bien folichon. Le reste est dans mon premier post

  15. #15
    Membre éprouvé Avatar de sisqo60
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2006
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 754
    Points : 1 188
    Points
    1 188
    Par défaut
    Citation Envoyé par Lychar Voir le message
    Voici le code généré par visual studio :

    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
     
    partial class Form2
    {
        /// <summary>
        /// Variable nécessaire au concepteur.
        /// </summary>
        private System.ComponentModel.IContainer components = null;
     
        /// <summary>
        /// Nettoyage des ressources utilisées.
        /// </summary>
        /// <param name="disposing">true si les ressources managées doivent être supprimées*; sinon, false.</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }
     
        #region Code généré par le Concepteur Windows Form
     
        /// <summary>
        /// Méthode requise pour la prise en charge du concepteur - ne modifiez pas
        /// le contenu de cette méthode avec l'éditeur de code.
        /// </summary>
        private void InitializeComponent()
        {
            this.components = new System.ComponentModel.Container();
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.Text = "Form2";
        }
     
        #endregion
    }
    Rien de bien folichon. Le reste est dans mon premier post
    Désolé j'ai beau chercher mais je ne vois pas le constructeur...
    Je réitère ma question, peux tu montrer le code de ton constructeur?
    Un âne se croit savant parce qu'on le charge de livres (proverbe américain)

    N'oubliez pas de avant de
    Pas de question techniques par MP, c'est contre la philosophie du forum

  16. #16
    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 sisqo60 Voir le message
    Désolé j'ai beau chercher mais je ne vois pas le constructeur...
    Je réitère ma question, peux tu montrer le code de ton constructeur?
    C'est dans le 1er post
    Il y a juste l'appel à InitializeComponent

  17. #17
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Février 2012
    Messages : 2
    Points : 2
    Points
    2
    Par défaut !!
    Pour ce qui passeront par là, avant de définir la form comme Mdicontaineur, passer la propriété AutoScroll = False .....

  18. #18
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 441
    Points
    4 441
    Par défaut
    bonjour sisqo60...

    Bonjour à tous.....

    Pour nettoyer les 3 boutons en plis du controlbox il suffit de faire This.Show avant le form enfant....
    Pour la double bordure j'ai pas ca chez moi...peut etre est -ce du à la version d'xp............

    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
     
     
    public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
                this.IsMdiContainer = true;
                this.WindowState = FormWindowState.Maximized;
     
               // montrer le parent d'abord
                this.Show();
     
                //ensuite l'enfant
                 Form2 f2 = new Form2();
                f2.MdiParent = this;
                f2.Show();
                f2.WindowState = FormWindowState.Maximized;
            }
        }
    bon code.............

  19. #19
    Membre émérite
    Avatar de DelphiManiac
    Homme Profil pro
    Homme à tout faire
    Inscrit en
    Mars 2002
    Messages
    1 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Homme à tout faire
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 147
    Points : 2 533
    Points
    2 533
    Par défaut
    Je n'ai peut être pas tout compris, mais pourquoi ne pas initialiser form2 dans le Load ou le Shown du form1, cela permettrait de s'assurer que form1 est bien créé et bien initialisé.

    [Edit]Si je copie/colle le code du 1er post, j'ai bien le problème des deux jeux de boutons par contre je n'ai pas le problème de la bordure (W7x64 sp1, dot.net 4 client profile)

    [ReEdit]Apparemment il ne semble pas conseillé d'initialiser des paramètres de la fenêtre courante dans le constructeur. Ex : après l'appel à InitializeComponent() n'a aucun effet par exemple. D'un autre coté, le framework propose 2 évenements pour ce genre de tâche, Load et Shown, donc ...

    D'après ce que j'en déduis, il semblerait que la fenêtre soit bien créer lors de la création d'un objet Form, le handle de la fenêtre existe et il est valide, mais si lors mets un breakpoint juste après l'appel à InitializeComponent(), on trouve donc bien la fenêtre dans spy++ par exemple, mais ces attributs (largeur, hauteur, ...) ne sont pas encore initialisés. Par exemple après l'exécution de la ligne this.WindowState = FormWindowState.Maximized; dans le constructeur et analyse de cette fenêtre dans spy++, les dimensions n'ont pas changées.
    Si ce message vous a semblé utile, il est possible qu'il soit utile à d'autres personnes. Pensez au . Et n'oubliez pas le le moment venu !

    On n'a pas à choisir si l'on est pour ou contre la décroissance, elle est inéluctable, elle arrivera qu'on le veuille ou non.

Discussions similaires

  1. (MDI) creer des objet dans formulaire enfant
    Par brahim20 dans le forum VB.NET
    Réponses: 2
    Dernier message: 13/08/2010, 21h05
  2. MDI, synchroniser des formulaires enfants et pattern Observer
    Par scarlatine dans le forum Windows Forms
    Réponses: 2
    Dernier message: 07/05/2009, 19h02
  3. Fenêtre enfant MDI : passage paramètre à la création
    Par Orangina dans le forum C++Builder
    Réponses: 3
    Dernier message: 21/07/2004, 11h55
  4. Réponses: 7
    Dernier message: 16/06/2004, 15h02
  5. [MDI][DLL] Enfant MDI dans une dll
    Par Pascal Jankowski dans le forum Composants VCL
    Réponses: 5
    Dernier message: 02/04/2004, 07h41

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