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 :

Manipulation une feuille MDI


Sujet :

Windows Forms

  1. #1
    Membre à l'essai
    Inscrit en
    Octobre 2005
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 13
    Points : 14
    Points
    14
    Par défaut Manipulation une feuille MDI
    Bonjour

    j'avais un Probleme au niveau manipulation une feuille MDI

    mon objectif c'est de mettre un boutton sur la feuille MDI et à partir ce boutton je manipule toutes feuilles

    exemple :
    Bouton nouveau

    lorsque j'affiche la feuille de Bon de commande
    je clique sur le boutton nouveau ,je traite une procedure specifique pour Bon de commande

    lorsque j'affiche la feuille de facture

    je clique sur le meme boutton et je traite une procedure specfique pour les factures

    y a t il quelqu'un qui peut m'aider pour ce probleme

    Merci

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

    Personnellement, je déconseillerai ce type de procédé car rien ne t'empêche d'avoir plusieurs form enfants ouvertes en même temps ... donc galére pour limiter le traitement à une seule de ces forms.

    Cela étant dit, tu peux lors du new de la form enfant ajouter un handler (via addhandler) sur le .click du button de la form MDI qui fait appel à la méthode particuliére.
    Quand tu fermes la form, tu fais un remove de ce handler.

    Mais bon, la tu essayes de dynamiser un menu commun alors qu'à terme tu vas forcément avoir des différenciations dans les menus de chaques forms... donc à éviter je pense.

    Cdt.

  3. #3
    Membre à l'essai
    Inscrit en
    Octobre 2005
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 13
    Points : 14
    Points
    14
    Par défaut re
    merci pour votre réponse

    mais malheureusement j'ai rien saisi car j me suis un débutant en vb .net

    pour moi je veux ouvrir plusieurs form fille en méme temps de differents chose ( bon de commande , facture, etc ......)

    mais je veux seulement qu'il soit un seul bouton qui fait des procedures spécifique pour chaque feuile sachant que les feuilles se différent au niveau traitement ( bon de commande , facture,etc...) aisni au niveau designer

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

    Oui, j'avais compris...

    Et je me répéte :
    Citation Envoyé par olsimare Voir le message
    tu essayes de dynamiser un menu commun alors qu'à terme tu vas forcément avoir des différenciations dans les menus de chaques forms... donc à éviter je pense.
    Donc si tu insistes, je veux bien te mettre un exemple de code pour aider à la compréhension mais ça te rendra service sur le moment et pas à long terme.

    Cdt.

  5. #5
    Membre à l'essai
    Inscrit en
    Octobre 2005
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 13
    Points : 14
    Points
    14
    Par défaut re
    Ok
    j'attends votre exemple

    Merci

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

    Puisque tu insistes...

    Donc j'ai un form mdi avec un bouton Button1 qui ouvre une form1, un Button2 qui ouvre une form2 et un bouton btnAction qui lance l'action à effectuer suivant la form :
    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
     
    Public Class FormMDI
     
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim f As New Form1
            f.MdiParent = Me
            f.Show()
        End Sub
     
        Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
            Dim f As New Form2
            f.MdiParent = Me
            f.Show()
        End Sub
     
    End Class
    Et 2 forms :
    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 Class Form1
        Private btnAction As New Button
        Public Sub New()
            InitializeComponent()
        End Sub
        Private Sub Form1_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown
            btnAction = Me.MdiParent.Controls("btnAction")
            AddHandler btnAction.Click, AddressOf goAction
        End Sub
        Private Sub goAction(ByVal sender As Object, ByVal e As EventArgs)
            MsgBox(Me.Text)
        End Sub
        Private Sub Form1_Disposed(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Disposed
            RemoveHandler btnAction.Click, AddressOf goAction
            MyBase.Finalize()
        End Sub
     
    End Class
    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 Class Form2
        Private btnAction As New Button
        Public Sub New()
            InitializeComponent()
        End Sub
     
        Private Sub Form2_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown
            btnAction = Me.MdiParent.Controls("btnAction")
            AddHandler btnAction.Click, AddressOf goAction
        End Sub
        Private Sub goAction(ByVal sender As Object, ByVal e As EventArgs)
            MsgBox(Me.Text)
        End Sub
        Private Sub Form2_Disposed(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Disposed
            RemoveHandler btnAction.Click, AddressOf goAction
            MyBase.Finalize()
        End Sub
     
    End Class
    Voilà... ça marche tant que tu assures que seule une form est ouverte.

    NOTA POUR CEUX QUI TOMBERAIENT LA DESSUS :
    C'est à proscrire et je suis pas fier de ce code ... et je m'en veux !

    Cdt.

  7. #7
    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 754
    Points
    39 754
    Par défaut
    Voilà... ça marche tant que tu assures que seule une form est ouverte
    Ca limite un peu l'intérêt d'utiliser une form MDI... quitte à utiliser cette approche, mieux vaut utiliser les évènements GotFocus et LostFocus plutôt que Shown et Dispose. Comme ça la seule contrainte est d'avoir une seule form fille active en même temps (tu peux en avoir plusieurs ouvertes)


    De toutes façons, il vaudrait mieux créer différents boutons, que tu affiches ou cache selon la form fille sélectionnée... comme dans Visual Studio par exemple, où les menus et barres d'outils changent selon le contexte (code, concepteur graphique, etc...). Ce serait nettement mieux, en termes d'ergonomie.

    Sinon, autre possibilité, avec un seul bouton: tu crées une interface, avec une méthode "DoAction" par exemple, et toutes les form MDI implémentent cette interface. En cas de clic sur le bouton, tu appelles cette méthode sur la form fille active, via l'interface.

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

    Citation Envoyé par tomlev Voir le message
    Sinon, autre possibilité, avec un seul bouton: tu crées une interface, avec une méthode "DoAction" par exemple, et toutes les form enfant implémentent cette interface. En cas de clic sur le bouton, tu appelles cette méthode sur la form fille active, via l'interface.
    Ah ben oui, c'est bien mieux ça ... j'avais pas pensé à l'interface !

    En même temps, je pense qu'on est d'accord pour dire qu'utiliser du MDI comme ça ...

    Cdt.

  9. #9
    Membre à l'essai
    Inscrit en
    Octobre 2005
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 13
    Points : 14
    Points
    14
    Par défaut
    merci beaucoup

    pour moi je vais essayer la méthode que tu m'as donnée

    mais est ce que tu peux m'envoyer le code pour me montrer comment creer l'interface pour ce code

    merci

    Citation Envoyé par tomlev Voir le message
    Sinon, autre possibilité, avec un seul bouton: tu crées une interface, avec une méthode "DoAction" par exemple, et toutes les form MDI implémentent cette interface. En cas de clic sur le bouton, tu appelles cette méthode sur la form fille active, via l'interface.


    est ce que tu peux m'envoyer ce Code parce que il me semble trés interessents tant que la premiere methode que tu m'as donné ça marche pas

  10. #10
    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 754
    Points
    39 754
    Par défaut
    est ce que tu peux m'envoyer ce Code parce que il me semble trés interessents tant que la premiere methode que tu m'as donné ça marche pas
    Je vais pas tout faire pour toi quand-même... mais bon, je peux te donner des petits bouts pour te montrer le principe

    Code de l'interface :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Interface IChildForm
        Sub DoAction()
    End Interface
    Toutes les form enfants implémentent l'interface :
    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
    Class FormBonDeCommande
        Implements IChildForm
     
        Public Sub DoAction()
            ' faire quelque chose avec le bon de commande
        End Sub
     
        ... ' le reste du code de la form
    End Class
     
    Class FormFacture
        Implements IChildForm
     
        Public Sub DoAction()
            ' faire quelque chose avec la facture
        End Sub
     
        ... ' le reste du code de la form
    End Class
    Dans le code du bouton :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim activeForm As IChildForm
        activeForm = CType(Me.ActiveMdiChild, IChildForm)
        activeForm.DoAction()
    End Sub
    Il y a peut-être des erreurs, je ne code pas en VB.NET d'habitude...

  11. #11
    Membre chevronné Avatar de Danyel
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2005
    Messages
    1 685
    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 685
    Points : 1 959
    Points
    1 959
    Par défaut
    Je te conseille d'aller voir un peu le code du starterkit de cinémathèque prenant en charge Amazon (anciennement appele Ma Cinematheque)
    http://msdn2.microsoft.com/fr-fr/vs2005/aa718342.aspx

    Il y a le code complet d'un exemple de gestion de feuille/form dynamiquement et qui ressemble, si mes souvenirs sont bons, fortement à tes besoins.

  12. #12
    Membre à l'essai
    Inscrit en
    Octobre 2005
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 13
    Points : 14
    Points
    14
    Par défaut re
    Merci beaucoup
    c'est résolu

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

Discussions similaires

  1. Pb de mise en mosaique de forms dans une feuille MDI
    Par Gilles BILLARD dans le forum Windows Forms
    Réponses: 1
    Dernier message: 21/05/2009, 07h04
  2. Comment ajouter une feuille MDI fille dans une DLL ?
    Par Najdar dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 13/02/2007, 16h30
  3. comment rendre une form une feuilles MDI
    Par NAIMA2 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 30/01/2007, 20h17
  4. [VB]Fond d'ecran dans une feuille MDI
    Par zejo63 dans le forum VB 6 et antérieur
    Réponses: 14
    Dernier message: 23/01/2006, 17h47
  5. [VB.NET] Manipuler une feuille via un module
    Par dinbougre dans le forum Windows Forms
    Réponses: 8
    Dernier message: 13/01/2005, 17h15

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