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 :

Atteindre les mdichildren d'une form mdi parent


Sujet :

Windows Forms

  1. #1
    Membre du Club
    Inscrit en
    Mars 2005
    Messages
    156
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 156
    Points : 54
    Points
    54
    Par défaut Atteindre les mdichildren d'une form mdi parent
    Bonjour,

    je désespère :
    j'ai une form MDI parent dans laquelle j'ai un menustrip dont le modifiers est à "public".

    Je voudrais réouvrir les fenêtres enfants qui ont été mises en invisible, mais je ne parviens pas.

    J'ai une application VB.net qui fait la meme chose, et là, j'y parviens.
    Voici mon code.

    Code vb.Net : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    For Each ChildForm As Form In MonAppliMDI.MdiChildren 'on rend visible et on réactive d'éventuelles forms ouverte (cas du vérouillage)
                        ChildForm.Visible = True
                        ChildForm.Enabled = True
    Next

    Le problème que j'ai c'est que je n'ai pas accès à la propriété MdiChildren.
    J'ai recherché partout sur le net, mais je ne parviens pas à le faire en C#....

    Help, help help

    Merci d'avance.

    Penchu

  2. #2
    Rédacteur
    Avatar de The_badger_man
    Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2005
    Messages
    2 745
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 745
    Points : 8 538
    Points
    8 538
    Par défaut
    Quel est le code C# que tu tapes ? Où mets-tu ce code ?

  3. #3
    Membre du Club
    Inscrit en
    Mars 2005
    Messages
    156
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 156
    Points : 54
    Points
    54
    Par défaut
    Voici mon code en C# :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    foreach (Form frm in Menu_MDI.mdichildren)
                    {
                        if (!frm.Enabled) frm.Enabled = true;
                        if (!frm.Visible) frm.Visible = true;
                    }
    Donc, dans mon cas, la propriété MdiChildren n'est pas disponible (pas visible) dans le menu de complétion de Visual studio. Voila mon problème.
    En fait, je cherche une solution pour ça, car je voudrais, lorsqu'on clique sur le bouton OK de ma fenêtre d'authentification, qu'il rende accessible le menu de ma form MDI parent, et qu'il rende visibles les fenêtres filles qui étaient invisible juste avant (lorsque je vérouille mon application).

    En espérant avoir été plus clair.

    Ce que je ne comprend pas, c'est que la même chose fonctionne très bien en visual basic.net.
    Mes forms sont bien publiques, donc je comprends pas trop ce qu'il se passe.

  4. #4
    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 194
    Points
    5 194
    Par défaut
    enfin, si tu es dans la form de base qui a IsMdiContainer a true,
    tu auras dans MdiChildren tous les enfants.. ca c'est sur

    The Monz, Toulouse

  5. #5
    Membre expérimenté Avatar de bossun
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 359
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 359
    Points : 1 443
    Points
    1 443
    Par défaut
    est-ce que Menu_MDI est bien un formulaire???

  6. #6
    Membre du Club
    Inscrit en
    Mars 2005
    Messages
    156
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 156
    Points : 54
    Points
    54
    Par défaut
    Oui, Menu_MDI est mon formulaire MDI parent, et il est forcément à IsMDIContainer à True.

    Si mon form est public, il doit quand même pouvoir être vu dans les autres forms, non?

  7. #7
    Membre du Club Avatar de psycho_38
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 55
    Points : 61
    Points
    61
    Par défaut
    Salut penchu

    Tiens essaye ce code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     Form[] form = this.MdiChildren;
                for (int i = 0; i < form.Length; i++)
                {
                    if (!form[i].Enabled) form[i].Enabled = true;
                    if (!form[i].Visible) form[i].Visible = true;               
                }

  8. #8
    Membre du Club
    Inscrit en
    Mars 2005
    Messages
    156
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 156
    Points : 54
    Points
    54
    Par défaut
    Mais ça, ça fonctionnera, certain, car ce code-là, tu le mets dans la form MDI parent, donc mon conteneur principal.
    Or, ce que je dois faire, c'est depuis une form enfant...

  9. #9
    Membre du Club Avatar de psycho_38
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 55
    Points : 61
    Points
    61
    Par défaut
    Oups excuse moi j ai oublié de changé la ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Form form = this.MdiParent;
             Form[] formchild = form.MdiChildren;

  10. #10
    Membre du Club
    Inscrit en
    Mars 2005
    Messages
    156
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 156
    Points : 54
    Points
    54
    Par défaut
    Au risque de paraître pour un gros chiant, c'est pas tout à fait ça que je recherche.
    Ca fonctionne comme cela, et je t'en remercie, mais ce que je voudrais, c'est pouvoir accéder directement aux propriétés de ma fenêtre MDI parent.

    Donc, j'ai un menustrip menustrip1 dans ma form MDI parent (Menu_MDI), et je voudrais pouvoir changer sa propriété enabled depuis une fenêtre enfant MDI.
    Et c'est ça qui me bloque toujours, et qui marche en VB.net et qui m'énerve surtout...

  11. #11
    Membre expérimenté Avatar de bossun
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 359
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 359
    Points : 1 443
    Points
    1 443
    Par défaut
    permet d'accéder à la fenetre mdi parent...

    fais un petit tour sur la msdn, y a pas mal de trucs qui te serviront...

  12. #12
    Membre du Club
    Inscrit en
    Mars 2005
    Messages
    156
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 156
    Points : 54
    Points
    54
    Par défaut
    Je suis bien conscient que this.mdiparent va me donner les propriétés de la fenêtre parent, mais je voudrais accéder aux variables de ma fenêtre parent directement, comme par exemple mon menu Menustrip1 auquel je voudrais accéder en faisant un truc du genre : Menu_MDI.Menustrip1.enabled = true;
    Mais ça ne fonctionne pas, même si mon menu et ma form sont en public, et la msdn ne m'aide pas beaucoup à ce niveau.
    Ou alors, je ne cherche pas du bon côté.

  13. #13
    Membre éclairé
    Avatar de shwin
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    568
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2003
    Messages : 568
    Points : 777
    Points
    777
    Par défaut
    tu as 2 solution

    form1
    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
     
    public partial class Form1 : Form
    	{
    		public Form1()
    		{
    			InitializeComponent();
    		}
     
    		private void toolStripButton2_Click(object sender, EventArgs e)
    		{
    			Form f = new mdichild();
    			f.MdiParent = this;
    			f.Show();
    		}
     
    		public bool Button2ToolStrip
    		{
    			get { return this.toolStripButton2.Enabled; }
    			set { this.toolStripButton2.Enabled = value; }
    		}
    	}
    form mdiChild
    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 mdichild : Form
    	{
    		public mdichild()
    		{
    			InitializeComponent();
    		}
     
    		private void button1_Click(object sender, EventArgs e)
    		{
    			Form1 f = this.MdiParent as Form1;
    			f.Button2ToolStrip = false;
    		}
    	}
    ----------------------------------------------------------------------
    form1
    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
     
    public partial class Form1 : Form
    	{
    		public Form1()
    		{
    			InitializeComponent();
    		}
     
    		private void toolStripButton2_Click(object sender, EventArgs e)
    		{
    			mdichild f = new mdichild();
    			f.MdiParent = this;
     
    			f.Button1Disabled += new EventHandler<EventArgs>(f_Button1Disabled);
     
    			f.Show();
    		}
     
    		void f_Button1Disabled(object sender, EventArgs e)
    		{
    			this.toolStripButton2.Enabled = false;
    		}
     
     
    	}
    form mdiChild
    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
     
    public partial class mdichild : Form
    	{
    		public mdichild()
    		{
    			InitializeComponent();
    		}
     
    		public event EventHandler<EventArgs> Button1Disabled;
     
    		private void OnButton1Disabled()
    		{
    			if (Button1Disabled != null)
    				Button1Disabled(this, new EventArgs());
    		}
     
    		private void button1_Click(object sender, EventArgs e)
    		{
    			OnButton1Disabled();
    		}
    	}
    La solution 2 est la meilleur car tu ne viole pas le concept d'enfant/parent. Un enfant ne connais pas sont parent, donc ne peut y acceder, cependant un parent connais son enfant. Donc pour respecter cette regle, tu doit utiliser les event. Soit déclancher un event et le parent l'handle!

  14. #14
    Membre du Club
    Inscrit en
    Mars 2005
    Messages
    156
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 156
    Points : 54
    Points
    54
    Par défaut
    Oui, ça je le conçois bien, je l'ai testé, et ça fonctionne, mais de nouveau, ce n'est pas ce que je recherche.

    Mon but est de pouvoir atteindre directement des objets de ma form parent, un peu comme si je mettais une variable en static dans cette form parent et que je voulais y accéder depuis une autre form(ce qui fonctionne dans mon projet).

    J'ai beau mettre mes objets en public, ou protected ou internal, rien n'y fait.

  15. #15
    Membre confirmé

    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    481
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 481
    Points : 616
    Points
    616
    Par défaut
    bonjour,
    mon idée est loin d'etre propre mais bon ...
    As tu tenter de les atteindre avec FormMere.Controls[]...?

    A voir
    Notalp

  16. #16
    Membre du Club
    Inscrit en
    Mars 2005
    Messages
    156
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 156
    Points : 54
    Points
    54
    Par défaut
    Je viens d'essayer et ça ne marche pas, car je dois instancier ma form parent pour utiliser les controls de cette form. Mais elle est déjà instanciée, du coup, ça ne peut pas fonctionner.
    Mais je comprends pas pourquoi, alors qu'elle est instanciée au départ, je n'ai pas accès au contrôles directement.

Discussions similaires

  1. Cacher les scrollbars d'une Form MDI
    Par alves.seb dans le forum Windows Forms
    Réponses: 3
    Dernier message: 11/10/2009, 20h29
  2. [c#]probleme avec les menu toolStripItem dans une form mdi??
    Par must19 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 05/11/2006, 23h02
  3. Comment faire une Form MDI dynamiquement modale ?
    Par eponette dans le forum Composants VCL
    Réponses: 5
    Dernier message: 30/09/2005, 10h14
  4. [C#] Travailler efficacement avec les panels dans une forme
    Par WwiloO dans le forum Windows Forms
    Réponses: 8
    Dernier message: 27/06/2005, 15h33
  5. Envoie d'un message a TOUS les composant d'une form
    Par chddv dans le forum Composants VCL
    Réponses: 7
    Dernier message: 15/09/2003, 09h47

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