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 :

[VB .Net][MDI]Débuter avec les MDI


Sujet :

Windows Forms

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mars 2004
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 79
    Points : 38
    Points
    38
    Par défaut [VB .Net][MDI]Débuter avec les MDI
    Bonjour, je suis étudiant je travaille sur un projet utilisant du VB .net

    Afin de commencer je m'exerce à faire quelques programme simple. Je vient de lire quelques article sur les MDI mais je ne saisi pas vraiment ce que c'est. Est-ce que c'est ce que l'on peut décrire comme des applications avec plusieurs fenêtres ?

    Si c'est le cas alors j'aurai des question à vous posé à ce sujet :
    Je souhaite réaliser un programme composé de 2 fenêtres. Lors du lancement du programme la 1ere s'affiche à l'écran. si on clique sur le outon qui se trouve dessus une autre apparait et la première disparait. Si on clique sur le bouton de la 2 ème fenêtre, celle-ci disparait et la première re-apparaît.

    Easy me direz-vous ! ben pas tant que ca.
    En fait j'utilise l'IDE pour le design de mes fenetres. Mais je ne vois pas comment faire le lien entre les 2 au niveau du code.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    'code 1ere fenetre
    Button_click(...)
       Dim fenetre_2 as form
       'fenetre modale j'ai deja compris ca ouf !
       fenetre_2.show()
       Me.hide()
    end sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    'code 2eme fenetre
    Button_click(...)
       Dim fenetre_1 as form
       fenetre_1.show()
       Me.hide()
    end sub
    évidemment ce code ne fonctionne pas comme je le voudrais ! en effet lorsque je clique sur le bouton de la 1ere fenetre une nvelle fentre apparait mais pas celle de l'IDE, de plus lorsque je ferme celle-ci le programme tourne toujours en fond....

    bref si quelqu'un pouvais me faire un ptit topo clair la dessus ca serait cool.... en attendant je vais me taper le cours de VB .net voir si y a des infos dedans
    merci d'avance
    à bientot

  2. #2
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Bien
    S'il s'agit d'une appli MDI vraie, tu disposes d'une et une seule Fenêtre principale (exemple FMain) avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.IsMdiContainer = True
    Et dans le cas que tu présentes tu as 2 Classes par exemple Form1 et Form2, celles capables simplement de se rendre invisible sur un buttonClick
    C'est à FMain donc de faire le plus gros du boulot

    • A Declarer au niveau de la classe FMain
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
       
      Private WithEvents f1 As Form1
      Private WithEvents f2 As Form2
      Au moment opportun, instancier de façon unique f1 et f2
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
       
      Me.f1 = New Form1()
      Me.f1.MdiParent = Me
      ...
      'sans oublier d'abonner l'event VisibleChanged de f2
      AddHandler Me.f1.VisibleChanged, AddressOf Me.F1VisibleChanged
      Me.f2 = New Form2()
      Me.f2.MdiParent = Me
      ...
      'sans oublier d'abonner l'event VisibleChanged de f2
      AddHandler Me.f1.VisibleChanged, AddressOf Me.F2VisibleChanged
      Puis le plus simplement du mode
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      Private Sub F1VisibleChanged(ByVal sender As Object, ByVal e As EventArgs)
         If Not(CType(sender, Form1).Visible) Then Me.f2.Visible = True
      End Sub
      Private Sub F2VisibleChanged(ByVal sender As Object, ByVal e As EventArgs)
         If Not(CType(sender, Form2).Visible) Then Me.f1.Visible = True
      End Sub

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mars 2004
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 79
    Points : 38
    Points
    38
    Par défaut
    d'abord merci pour ces explication.

    En lisant un cours de VB .net trouver sur votre site, je me suis rendu compte de quelque chose :

    J'ai crée une solution. J'ai ajouter un 1er projet qui corespond à ma 1ere fenetre. Puis de la même facon j'ai ajouter à la solution un autre projet qui corespond à la 2ème fenêtre, du coup je ne sais plus si je suis encore dans le cadre de MDI ...

    Qu'en pensez vous ?

    De plus je re formule une question écrite précèdemment, si dans un même projet (pas une solution) j'ai 2 fenetre que je créer avec l'IDE. Je veut afficher la 2eme fentre crée avec l'ide, il faut donc que je déclare dans la classe de la 1ere fenetre la 2eme fenetre, mais non pas une fenetre klkonque ! mais celle que j'ai faite avec l'ide qui porte un nom bien spécifique ?

    bon j'espere que je ne suis pas trop exigeant, merci d'avance

    à bientot

  4. #4
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Apparemment ce que tu expliques n'a pas pas grand chose à voir avec le MDI Classique
    Ce qui crée l'embrouille c'est la confusion que tu opères en liant toute ton explication à l'IDE, il serait preferable que quelquesoit l'IDE tu sois en mesure de nous décrire clairement L'APPLICATION que tu souhaites proposée à ton utilisateur

    1. A l'ouverture de l'application Form1 est affichée
    2. Si OK Form1 invisible puis affichage Form2
    3. Si OK Form2 invisible puis affichage Form1
    ...

    Dans ce cas Form1 est le Main de ton Application, je te suggère en conséquence de simplement déclarer et instancier f2 comme indiqué au dessus et Form1 contrôle facilement les choses par
    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
     
    '...
    Private WithEvents f2 As Form2 
    '...
           'Quelquepart...
           Me.f2 = New Form2() 
           '... attribution des differentes propriétés
     
    '...
    Private Sub OKClick(ByVal sender As Object, ByVal e As EventArgs) Handles Me.ButtonOK.Click
        Me.f2.Visible = True
    End Sub
     
    Private Sub F2VisibleChanged(ByVal sender As Object, ByVal e As EventArgs) Handles Me.f2.VisibleChanged
       Me.Visible = Not CType(sender,Form2).Visible
    End Sub
    Ne pas oublier dans la Classe Form2 d'implementer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Private Sub OKClick(ByVal sender As Object, ByVal e As EventArgs) Handles Me.ButtonOK.Click
        Me.Visible = False
    End Sub
    Ainsi ce sont toujours les mêmes instances qui sont manipulées.
    Par contre je crois qu'il faudra que tu te poses le problème d'une fermeture intempestive de f2 pour déclencher aussi la réapparition de Form1 afin de pouvoir quitter l'application normalement, à moins que tu souhaites autre chose :

  5. #5
    Nouveau membre du Club
    Inscrit en
    Mars 2004
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 79
    Points : 38
    Points
    38
    Par défaut
    Ok merci pour cette réponse claire, mais je crois que je me suis mal exprimé.

    Concernant le cahier des charges tu as bien compris : 2 fenetres, avec un bouton sur chacune d'entres elles. un clique sur la 1er fenetre entraine l'affichage de l'autre et sa propre disparition. bref...

    j'ai bien comprise comment tu me suggère de solutionner le problème, mais je me pose quand même 2 questions :
    1°) Si je souhaite faire le même programme sans faire de prog en "dur" (instansiation des form en dur et config de celles en code etc...) et que je veut utiliser l'ide (vu le prix du logiciel ca serait dommage de pas l'utiliser )

    parce que la ca va j'ai un bouton sur mes fenetres. Mais si j'avais un 50aine de composant graphiques (groupbox, bouton, etc...) à positionner je devrai le faire en dur aussi ??? ca me parait un peu abérant ... mais bon...
    ma 1ere question est donc : est-il possible d'acceder à la fenetre créer en dur dans le code à travers l'IDE d'une quelquonque facon ?

    2ème question sans rapport avec la precedente°)

    Ma solution est composé de 2 projet. Un projet avec une fenetre et un bouton. Et un autre projet avec une autre fenetre et un autre bouton.

    est il possible de communiquer entre les 2 projet (genre afficher la fenetre par exemple ! )

    bon voila je vais disposé je revient demain aevc encore plusd e questions chian..s

  6. #6
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Citation Envoyé par toto4650
    ma 1ere question est donc : est-il possible d'acceder à la fenetre créer en dur dans le code à travers l'IDE d'une quelquonque facon ?
    oui mais faut-il encore que tu nous dises de quel IDE il s'agit
    Citation Envoyé par toto4650
    2ème question sans rapport avec la precedente°)
    Ma solution est composé de 2 projet. Un projet avec une fenetre et un bouton. Et un autre projet avec une autre fenetre et un autre bouton.
    est il possible de communiquer entre les 2 projet (genre afficher la fenetre par exemple ! )
    oui, il suffit d'ajouter aux references du projet la dll de l'autre
    comment et bien on verra quand on saura enfin de quel IDE tu parles

    Cependant, il serait preferable que tu construises autrement tes projets
    1. Un projet type "bibliothèque de contrôles" qui une fois compilé peux être importé par n'importequel autre projet qui en aurait besoin dans ses references
    2. Le projet application proprement dit qui correspond à l'interface utilisateur par exemple et qui importera la dll precedemment citée

  7. #7
    Nouveau membre du Club
    Inscrit en
    Mars 2004
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 79
    Points : 38
    Points
    38
    Par défaut
    Citation Envoyé par neguib
    oui mais faut-il encore que tu nous dises de quel IDE il s'agit
    en effet je suis un peu stupide j'ai complètement oublier de vous préciser cela !!!

    Mon ide c'est Visual Studio 2003 Pro

    alors comment kon fait pour acceder au forms crées en dur ???

  8. #8
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Bon quand tu ouvres ton projet, as-tu le mode design de ta Form ou le mode code :

  9. #9
    Nouveau membre du Club
    Inscrit en
    Mars 2004
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 79
    Points : 38
    Points
    38
    Par défaut
    Citation Envoyé par neguib
    Bon quand tu ouvres ton projet, as-tu le mode design de ta Form ou le mode code :
    bonjour, désolé du retard,
    alors quand j'ouvre mon VS déjà j'ouvre une solution et pas un projet ! (je suis un peu chiant )
    En fait ma solution est composé de 2 projets. Chaque projet constitué d'une form.

    mais si j'ouvre l'un des deux projet , j'ai accès au 2 modes...

    merci de votre aide !

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    487
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 487
    Points : 621
    Points
    621
    Par défaut
    Si j'ai bien compris, l'objectif est de réaliser une application MDI.
    Pour se mettre d'accord, il faut déjà définir MDI : l'application comporte une fenêtre mère qui possède des fenêtres filles qui ne peuvent pas s'afficher en dehors de leur fenêtre mère.
    La fenêtre mère expose généralement un menu Fenêtre qui permet de passer d'une fille à l'autre.

    Pour créer une telle application, il faut utiliser un seul projet.
    Les différentes fenêtres sont ajoutées au même projet par le menu Project/Add Windows Form.

  11. #11
    Nouveau membre du Club
    Inscrit en
    Mars 2004
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 79
    Points : 38
    Points
    38
    Par défaut
    Citation Envoyé par NicolasG
    Si j'ai bien compris, l'objectif est de réaliser une application MDI.
    Pour se mettre d'accord, il faut déjà définir MDI : l'application comporte une fenêtre mère qui possède des fenêtres filles qui ne peuvent pas s'afficher en dehors de leur fenêtre mère.
    La fenêtre mère expose généralement un menu Fenêtre qui permet de passer d'une fille à l'autre.

    Pour créer une telle application, il faut utiliser un seul projet.
    Les différentes fenêtres sont ajoutées au même projet par le menu Project/Add Windows Form.
    Oui tu as bien comprise ce que je voulais, il s'agit donc bien d'une MDI

    Il faut donc un seul projet et non pas une solution.

    alors à partir de là, je crée non plsu une solution mais un projet avec une fenêtre mère. celle ci est dessiner avec l'IDE vs .net 2003, j'ajouter une fenetre au projet, que je dessine aussi avec l'ide et ke je nomme fenetreFille (toujours dans les pptes de l'ide).
    pour l'appeler lors d'un click sur un bouton par exemple j'ai juste à faire un fenetreFille.show() ?

    merci d'avance

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    487
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 487
    Points : 621
    Points
    621
    Par défaut
    Un projet est toujours contenu dans une solution. Ca ne pose pas de problème s'il est unique.

    La fenêtre fille doit être crée (new) avant de pouvoir l'afficher.

  13. #13
    Nouveau membre du Club
    Inscrit en
    Mars 2004
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 79
    Points : 38
    Points
    38
    Par défaut
    Ok d'accord mais ca ne me dis toujours pas comment faire pour solutionner mon problème récapitulatif :

    - j'ouvre vs .net
    - je crée un nveau projet
    - je dessine un fenetre avec l'ide (place mes boutons etc..)
    - je dessine une autre fenetre avec d'autre boutons etc...
    - je souhaite faire apparaitre la seconde fenetre à partir de la première COMMENT DOIS-JE PROCEDER ?

    merci bokou

  14. #14
    Membre régulier Avatar de netomin
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2005
    Messages : 81
    Points : 102
    Points
    102
    Par défaut
    Imaginons t'a une fenetre FormMere qui va être celle qui va contenir toutes les autres fenetres. Alors dans le propietés de cette fenêtre tu cherche la propieté IsMdiContainer et tu met TRUE. Aussi donc si t'a une fenetre fille FormFille1 (tu peut en avoir plusieurs) alors si tu veux par exemple que ta fenetre fille s'affiche au moment du chargement de ta fenêtre mere tu écris dans l'évènement Load de ta FormMere comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub FormMere_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Dim myFormFille1 As New FormFille1
            myFormFille1.MdiParent = Me
            myFormFille1.Show()
        End Sub
    Si tu veux que ta fenetre fille occupe toute la place à l'interieur de la fenetre mere alors il te faut juste ajouter apres myFormFille1.MdiParent = Me cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    myFormFille1.Dock = DockStyle.Fill
    Et si tu veux que la fenêtre fille s'affiche seulement après avoir fait click dans un bouton d'un menu par exemple de ta fenetre mere il te suffit juste de copier/coller le code de Load a l'évènement click de ton bouton et/ou Menu.

    J'éspère t'avoir aidé.

  15. #15
    Nouveau membre du Club
    Inscrit en
    Mars 2004
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 79
    Points : 38
    Points
    38
    Par défaut
    Citation Envoyé par netomin
    Imaginons t'a une fenetre FormMere qui va être celle qui va contenir toutes les autres fenetres. Alors dans le propietés de cette fenêtre tu cherche la propieté IsMdiContainer et tu met TRUE. Aussi donc si t'a une fenetre fille FormFille1 (tu peut en avoir plusieurs) alors si tu veux par exemple que ta fenetre fille s'affiche au moment du chargement de ta fenêtre mere tu écris dans l'évènement Load de ta FormMere comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub FormMere_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Dim myFormFille1 As New FormFille1
            myFormFille1.MdiParent = Me
            myFormFille1.Show()
        End Sub
    Si tu veux que ta fenetre fille occupe toute la place à l'interieur de la fenetre mere alors il te faut juste ajouter apres myFormFille1.MdiParent = Me cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    myFormFille1.Dock = DockStyle.Fill
    Et si tu veux que la fenêtre fille s'affiche seulement après avoir fait click dans un bouton d'un menu par exemple de ta fenetre mere il te suffit juste de copier/coller le code de Load a l'évènement click de ton bouton et/ou Menu.

    J'éspère t'avoir aidé.
    Ok ben je crois avoir fait le tour de la question ! tu m'as en effet bien aidé !
    merci à tous !
    à bientôt !

  16. #16
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Alors bouton en bas à gauche svp

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

Discussions similaires

  1. Débuter avec les sessions
    Par Leena666 dans le forum Langage
    Réponses: 3
    Dernier message: 24/04/2007, 11h40
  2. [BCB6] Débuter avec les sockets
    Par randa1 dans le forum C++Builder
    Réponses: 1
    Dernier message: 08/02/2007, 12h23
  3. [VB.net][vs2005] Problème avec les expressions régulières
    Par zouhib dans le forum Windows Forms
    Réponses: 13
    Dernier message: 22/06/2006, 16h56
  4. [VB.NET] [ODBC] Pb avec les parameters...
    Par Pleymo dans le forum Windows Forms
    Réponses: 5
    Dernier message: 02/03/2005, 15h21

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