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

VB.NET Discussion :

Application MDI/Position Fenêtres


Sujet :

VB.NET

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    306
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 306
    Points : 164
    Points
    164
    Par défaut Application MDI/Position Fenêtres
    Bonjour,

    Dans l'appli MDI que je développe, je souhaite que la fenêtre fille soit de taille maximale et qu'elle ne fasse qu'un avec la fenêtre mère (comme dans n'importe quelle appli classique.)
    Or, aujourd'hui, les 2 fenêtres restent dissociées même si la fenêtre fille occupe toute la fenêtre mère...
    De plus la fenêtre fille clignote quand je veux la déplacer ou la réduire... bref c'est l'enfer !

    J'espère être clair...
    Quelles propriétés/méthodes dois-je utiliser ?

  2. #2
    Membre chevronné
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 175
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 175
    Points : 1 767
    Points
    1 767
    Par défaut
    Bonjour.

    Citation Envoyé par House MD Voir le message
    Or, aujourd'hui, les 2 fenêtres restent dissociées même si la fenêtre fille occupe toute la fenêtre mère...
    Qu'entends-tu par "restent dissociées" car la fenêtre fille reste dans la MDI (rassure moi ... ).

    Citation Envoyé par House MD Voir le message
    De plus la fenêtre fille clignote quand je veux la déplacer ou la réduire... bref c'est l'enfer !
    C'est quand tu veux déplacer la fenêtre fille ou la MDI ? Si c'est la fenêtre fille, quel est l'intérêt puisque tu veux qu'elle occupe toute la MDI ?

    Conseil : n'utilise pas les MDI.
    Cdt.
    Bon à savoir : la touche F1 ne sert pas à commander des places pour le grand prix de Belgique.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    306
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 306
    Points : 164
    Points
    164
    Par défaut
    Salut Olsimare,

    La fenêtre fille occupe bien tout le conteneur de la fenêtre mère
    mais les 2 fenêtres ne "fusionnent" pas : elles ont chacune leur propre contour.

    Ex : quand tu ouvres Excel, la fenêtre du classeur (fille) prend toute la place et "fusionne" par défaut avec la fenêtre mère.

    C'est ca que je veux obtenir

    Si on clique su l'icône "Niveau inférieur" de la fenêtre fille, celle-ci conserve (presque) la même taille mais se désolidarise de la fenêtre mère.

    C'est ca que j'obtiens malheureusement.

    Par ailleurs, qu'est ce que tu veux dire par "n'utilise pas les MDI" ?
    Comment peut-on s'en passer ?

    Cdt.

  4. #4
    Membre chevronné
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 175
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 175
    Points : 1 767
    Points
    1 767
    Par défaut
    Bonjour.

    Citation Envoyé par House MD Voir le message
    La fenêtre fille occupe bien tout le conteneur de la fenêtre mère
    mais les 2 fenêtres ne "fusionnent" pas : elles ont chacune leur propre contour.

    Ex : quand tu ouvres Excel, la fenêtre du classeur (fille) prend toute la place et "fusionne" par défaut avec la fenêtre mère.
    Il faut ajouter un menustrip à ta form MDI pour obtenir le même résultat que sous Excel par exemple.

    Avec pour la form enfant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ChildForm.WindowState = FormWindowState.Maximized
    Citation Envoyé par House MD Voir le message
    Si on clique su l'icône "Niveau inférieur" de la fenêtre fille, celle-ci conserve (presque) la même taille mais se désolidarise de la fenêtre mère.
    Je ne pense pas que tu pourras l'éviter avec le MDI (en tout j'ai pas trouvé).


    Citation Envoyé par House MD Voir le message
    Par ailleurs, qu'est ce que tu veux dire par "n'utilise pas les MDI" ?
    Comment peut-on s'en passer ?
    Tu peux directement placer ta form enfant dans un contenair quelconque pour peu que tu positionnes TopLevel à false.

    Par exemple, j'ai une form7 avec un panel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Public Class Form7
        Private Sub Form7_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown
            Dim f As New Form1
            f.ControlBox = False
            f.FormBorderStyle = Windows.Forms.FormBorderStyle.None
            f.TopLevel = False
            Me.Panel1.Controls.Add(f)
            f.Show()
        End Sub
    End Class
    Cdt.
    Bon à savoir : la touche F1 ne sert pas à commander des places pour le grand prix de Belgique.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    306
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 306
    Points : 164
    Points
    164
    Par défaut
    Concernant la solution MDI, je fais déjà exactement ce que tu me suggères :

    Menustrip+FormWindowState.Maximized

    et de fait la fenêtre fille est maximized... elle ne fusionne simplement pas avec la fenêtre mère...

    Je vais essayer ta solution sans MDI.
    Merci beaucoup.

  6. #6
    Membre chevronné Avatar de Danyel
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2005
    Messages
    1 680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 680
    Points : 1 951
    Points
    1 951
    Par défaut
    As tu essaye :
    Que les neurones soient avec toi, jeune padawan.
    Ne pas oublier, qu'un métier, développer être.
    Effectuer des recherches et lire les tutos, avant de poster, tu dois.
    Aucune question technique, faites par MP, tu ne dois.

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    306
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 306
    Points : 164
    Points
    164
    Par défaut
    Oui, c'est déjà la cas...
    Merci en tous cas.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    299
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 299
    Points : 330
    Points
    330
    Par défaut
    Bonjour,
    Je relance le sujet car je suis confronté au même problème, comme quoi...
    J'ai de mon coté un splitcontainer qui contient un panel dans lequel s'intègre une frame elle-même formée de tableLayoutPanel (respirez...).

    Grosso modo, je cherche à gérer les cas où
    - la forme parent change de taille (donc le splitter est impacté donc la taille de la frame contenue dedans)
    - l'utilisateur bouge manuellement la position du splitter

    Dans les deux cas, ma frame (gérée selon l'exemple d'Olsimare) ne change pas de taille (les events de resize ne s'appliquent visiblement pas) bien qu'elle soit marquée en maximisé.

    Alors, any idea will be welcome !

  9. #9
    Membre chevronné
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 175
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 175
    Points : 1 767
    Points
    1 767
    Par défaut
    Bonjour.

    Citation Envoyé par nikoko34 Voir le message
    Dans les deux cas, ma frame (gérée selon l'exemple d'Olsimare) ne change pas de taille (les events de resize ne s'appliquent visiblement pas) bien qu'elle soit marquée en maximisé.
    Si c'est vraiment via un controls.add, c'est normal, ta form n'est plus un control de haut niveau mais un control enfant... donc utilise le dock.fill car le maximized ou autre ne marcheront plus.

    Cdt.
    Bon à savoir : la touche F1 ne sert pas à commander des places pour le grand prix de Belgique.

  10. #10
    Provisoirement toléré
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2005
    Messages : 114
    Points : 86
    Points
    86
    Par défaut
    salut
    a mon avis c'est pas du vb.net 2005, je crois que c'est inférieur
    car avec ce dernier tout ceci est presque géré automatiquement
    long vie a vb.net 2005
    faites gaffe je pourrai venir vous hantez la nuit

  11. #11
    Membre chevronné
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 175
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 175
    Points : 1 767
    Points
    1 767
    Par défaut
    Bonjour.

    Citation Envoyé par fontome_ 123 Voir le message
    salut
    a mon avis c'est pas du vb.net 2005, je crois que c'est inférieur
    car avec ce dernier tout ceci est presque géré automatiquement
    long vie a vb.net 2005
    De quoi parles-tu ????????? Pour le cas, mon exemple est bien basé sur le Framework 2.0 ... Je suis preneur de tes lumiéres si y'a plus simple ...

    Cdt.
    Bon à savoir : la touche F1 ne sert pas à commander des places pour le grand prix de Belgique.

  12. #12
    Provisoirement toléré
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2005
    Messages : 114
    Points : 86
    Points
    86
    Par défaut
    en faite moi j'utilise un medi parent form deja prêt en vb.net2005 je ne sais pas pour vous mais ce qui m'épargne les problèmes de fusion
    pour le 2eme point:
    profiter de tous l'espace ecran
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    fom1.windowstate = Maximized
    bah pour la fusion et Max.... ca marche c pourquoi j'ai dit long vie....
    faites gaffe je pourrai venir vous hantez la nuit

  13. #13
    Membre chevronné
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 175
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 175
    Points : 1 767
    Points
    1 767
    Par défaut
    Re.

    fontome_ 123, t'as pas du bien lire le premier post :
    Citation Envoyé par House MD Voir le message
    Dans l'appli MDI que je développe, je souhaite que la fenêtre fille soit de taille maximale et qu'elle ne fasse qu'un avec la fenêtre mère (comme dans n'importe quelle appli classique.)
    Or, aujourd'hui, les 2 fenêtres restent dissociées même si la fenêtre fille occupe toute la fenêtre mère..
    Le probléme est plus dans la dissociation des 2 fenêtres.

    Ceci dit, le MDI c'est pas non plus vraiment nouveau ...

    Cdt.
    Bon à savoir : la touche F1 ne sert pas à commander des places pour le grand prix de Belgique.

  14. #14
    Provisoirement toléré
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2005
    Messages : 114
    Points : 86
    Points
    86
    Par défaut
    euh
    maintenant je crois que j'ai compris , en faite je viens de faire la remarque et ca ne va pas du tout même pour moi
    donc ce que j'ai fait j'espère que c dans le sens de la question cette réponse
    donc a mettre dans un module
    bien sur ca nécessite un menustrip
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    Sub instance_mdi(ByVal form_instance As Form)
     
            ' Make it a child of this MDI form before showing it.
            form_instance.MdiParent = MDIParent1
            '
     
            m_ChildFormNumber += 1
            ' ChildForm.Text = "Window " & m_ChildFormNumber
            form_instance.Text = "Window " & m_ChildFormNumber
            form_instance.Show()
        End Sub
    avec dans le module toujour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Public m_ChildFormNumber As Integer = 0
    et puis l'appel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    instance_mdi("ta_form")
    j'espère que ca vous aiderez
    faites gaffe je pourrai venir vous hantez la nuit

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    299
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 299
    Points : 330
    Points
    330
    Par défaut
    Bonjour et merci pour vos réponses.
    Effectivement, je suis bien sous la V2 du framework (2005).
    Le dockstyle du controle enfant n'est pas plus efficace.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    monSplitter.monPanel.Controls(0).Dock = DockStyle.Fill
    ne me fill rien du tout... (pas plus que les changements forcés de taille)

    Serait-on obligé dans ce cas de passer par du MDI sans appliquer le M de multiple ?

  16. #16
    Membre chevronné
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 175
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 175
    Points : 1 767
    Points
    1 767
    Par défaut
    Bonjour.

    Je demande à voir le code complet moi ... car j'ai une appli qui me prouve que ça marche trés bien avec le controls.add.

    Cdt.
    Bon à savoir : la touche F1 ne sert pas à commander des places pour le grand prix de Belgique.

  17. #17
    Provisoirement toléré
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2005
    Messages : 114
    Points : 86
    Points
    86
    Par défaut
    salut ça fait un baie
    tu as testé le code que je t'ai communiquer ?
    biens sur faut pas oublié le dock comme combinaison.
    ca marche ou non?
    faites gaffe je pourrai venir vous hantez la nuit

  18. #18
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    299
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 299
    Points : 330
    Points
    330
    Par défaut
    On se connait Fontome ?

    Mon WindowState de la fenêtre "fille" est déjà à maximized (d'ailleurs, si je le mets à normal, la fenêtre ne s'affiche pas dans son container, première bizarrerie).
    Je précise aussi que je travaille sous SharpDevelop
    Il s'agit peut être d'un problème de propriété mal settée dans la fenêtre fille ou mère (ou alors d'event non précisé ?).
    Pour la fenêtre fille, j'ai mis Autosize à True, AutosizeMode à GrowAndShrink et ControlBox a False.
    IsMDIContainer reste à False pour les deux fenêtres.
    Pour la fenêtre container, au niveau des déclarations
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private WithEvents MyFenetreFille As new frmFenetrefille()
    Et dans le Show,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    MyFenetreFille.TopLevel = False
    MySplitter.Panel2.Controls.Add(MyFenetreFille )
    MyFenetreFille.Dock = dockstyle.Fill
    MyFenetreFille.show()
    J'ai aussi vérifié que les event de Paint sont bien gérés sur la fenêtre fille, que ceux de resize sont pas gérés du tout.
    Après, je fais bouger le splitter ou je redimentionne la fenêtre container et j'aimerais bien que cette (censuré) de fenêtre fille soit redimentionnée pour continuer à remplir la nouvelle "surface" = width et height) disponible.
    Et celà, que nenni... Elle s'adapte bien en haut à gauche de la nouvelle surface mais ne s'adapte pas en taille.

  19. #19
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    299
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 299
    Points : 330
    Points
    330
    Par défaut
    Bingo... !
    A force de tripatouiller dans les propriétés, et après avoir créé un projet tout simple, j'ai réussi à faire marcher le bouzin...

    En fait, il faut laisser les propriétés de la fenêtre fille à celles proposées par défaut et notamment le WindowState à Normal (c'est bien un paradoxe car on aimerait que la fenêtre fille soit toujours maximisée dans son container !) et ne pas toucher les propriétés Autosize (là aussi, ca semble bizarre vu qu'on veut qu'elle s'autosize...).

    Merci pour vos réponses en tout cas, ça m'a bien aiguillé dans mes recherches.
    Sujet résolu !

  20. #20
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    299
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 299
    Points : 330
    Points
    330
    Par défaut
    Le tag résolu ne peut être mis que par celui qui a créé le message (house_md)...enfin, sauf erreur de ma part !
    Tu devais avoir un drap devant tes yeux...

    Bien maintenant que ça marche, je vais vérifier si c'est récursif (ma fenêtre fille contient elle même une autre fenêtre créée selon le même mécanisme...)

Discussions similaires

  1. Position fenêtres dans mdi parent
    Par dadal56 dans le forum Windows Forms
    Réponses: 6
    Dernier message: 19/01/2010, 11h47
  2. Réponses: 2
    Dernier message: 02/12/2008, 00h15
  3. arrière plan de la fenêtre principale d'une application MDI
    Par bahiatoon dans le forum C++Builder
    Réponses: 3
    Dernier message: 06/10/2006, 21h51
  4. Comment fermer une fenêtre Child dans une application MDI
    Par bahiatoon dans le forum C++Builder
    Réponses: 9
    Dernier message: 05/10/2006, 08h57
  5. Réponses: 11
    Dernier message: 06/12/2005, 08h23

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