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

C# Discussion :

Agir sur Form1(déjà chargé) à partir de Form2


Sujet :

C#

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    355
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 355
    Points : 118
    Points
    118
    Par défaut Agir sur Form1(déjà chargé) à partir de Form2
    Bonjour à tous
    Ayant une bonne expérience en VB et nettement moins en VB.Net, je m’accroche pour faire des petites applications en C#

    J’ai deux formulaires Form1 et Form2
    Dans Form1, je peux agir sur Form2, au travers de frm2 que j’ai défini avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     public Form2 frm2 = new Form2();
    Et pas sur les composants de Form2
    Par exemple frm2.button1 est refusé, je dois utiliser une routine public qui se trouve dans Form2 et que je lance par frm2.MaRoutine() ;
    C’est déjà un début.

    Mais pour faire pareil et agir sur Form1 en partant de Form2, là…. J’ai pas trouvé et je ne peux pas croire que cela ne soit pas prévu.

    Quelqu’un peut-il me dire comment faire ?

    Voici Form1.cs
    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
     
    namespace Essai_sur_deux_formilaires
    {
     
        public partial class Form1 : Form
        {
            public Form2 frm2 = new Form2(); // Possible sur Form1, mais pas sur Form2
     
            public Form1()
            {
                InitializeComponent();
            }
     
            private void Form1_Load(object sender, EventArgs e)
            {
                // Ces instructions fonctionnent parfaitement
                frm2.Show();
                frm2.Top = this.Top;
                frm2.Left = this.Left + this.Width;
                frm2.BackColor = Color.Aqua;
            }
     
            private void button1_Click(object sender, EventArgs e)
            {
                // Là aussi sans problème
                frm2.BackColor = Color.Red;
                frm2.MaRoutine();
            }
        }
    }
    et voici Form2.cs

    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
     
    namespace Essai_sur_deux_formilaires
    {
        public partial class Form2 : Form
        {
            public Form2()
            {
                InitializeComponent();
            }
     
            private void button1_Click(object sender, EventArgs e)
            {
                //Form1.BackColor = Color.AliceBlue; //N'est pas accepté par l'éditeur
            }
     
            private void button2_Click(object sender, EventArgs e)
            {
                Form1 frm1 = new Form1();
                frm1.BackColor = Color.Blue;
                // Aucune action visible. Poutant frm1 est bien définit en 
                //{Essai_sur_deux_formilaires.Form1, Text: Form1}
            }
            public void MaRoutine()
            {
                button1.BackColor = Color.Yellow;
                button2.BackColor = Color.Green;
            }
            private void Form2_Load(object sender, EventArgs e)
            {
     
            }
     
        }
    }

  2. #2
    Membre habitué
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2011
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Avril 2011
    Messages : 58
    Points : 157
    Points
    157
    Par défaut
    Si tu veux avoir accès a tes différents objet de Form1 et Form2 pourquoi met-tu des privates ?

    Public => Tout le monde peux les contacté
    Protected => Seulement lui-même et les enfants qui hérite
    Private => Seulement lui-même personne d'autre.

    L'utilisation du private est peut-être justifié mais si tu veux pouvoir y accéder depuis ailleurs il te faut faire des accesseur.

    J'espère que cela t'aide un peu ^^

  3. #3
    Expert confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2009
    Messages
    2 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2009
    Messages : 2 031
    Points : 5 476
    Points
    5 476
    Par défaut
    Plusieurs choses:
    Il est possible de rendre les buttons "Public" dans le designer, il y a un parametre "modifier" je crois. Mais d'une manière général il vaut mieux que tu gardes "MaRoutine" niveau maintenance c'est mieux.

    La différence entre ton form1 et ton form2 c'est que form1 possède une référence sur form2 mais pas l'inverse.
    Du coup dans form2 tu instancie un nouveau Form1 qui n'a rien avoir avec celui qui est affiché.
    Le plus simple c'est d'ajouter un paramètre dans ton constructeur de Form2(Form1 referenceForm1) , puis de le stocker dans ta classe.
    Tu peux je pense également utiliser la propriété "Parent" de Form2 que tu cast en Form1. Mais bon si tu décides d'instancier Form2 depuis Form3...Ca ne marchera pas.

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 93
    Points : 169
    Points
    169
    Par défaut
    Salut,

    Reprenons ton besoin : tu veux qu'une instance de Form1 connaisse une instance de Form2, et que cette instance de Form2 connaisse l'instance de Form1.

    Pour cela il faut que ta classe Form1 ait une propriété (disons F2) du type Form2, et que ta classe Form2 ait une propriété (disons F1) du type Form1.

    Ensuite dans ton code appelant, tu auras quelque chose de ce genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Form1 frm1 = new Form1();
    Form2 frm2 = new Form2();
     
    frm1.F2 = frm2;
    frm2.F1 = frm1;
    Pour la problématique d'accès aux contrôles, il faut changer la propriété Modifier dans le designer.

    Bon code !

  5. #5
    Membre éclairé Avatar de -N4w4k-
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2011
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 545
    Points : 801
    Points
    801
    Par défaut
    Salut Claude,

    Je pense que techniquement c'est assez facilement réalisable comme tu as pu le voir dans les réponses précédentes (encore bien d'autres solutions existes).

    Afin de choisir celle qui s'appliquera le mieux à ton besoin, tu devrais nous en dire plus sur ta problématique à la base. Que doivent faire tes Forms? Pourquoi tes deux Forms doivent-ils se connaître?

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    355
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 355
    Points : 118
    Points
    118
    Par défaut
    Je vous remercie de vos réponses

    A N4w4k
    Comme je ne voudrai pas mourir idiot et que le langage C m’a toujours effrayé, j’ai décidé, à 80 ans de m’y attaquer et je suis peut-être présomptueux
    Néanmoins j’essaye de commencer avec un petit programme extrêmement simple, (du moins en VB.Net). J’ai donc utilisé deux formulaires pour savoir ce que je pouvais en faire en les faisant travailler ensembles.
    Mais dès le départ, je me rends compte que ça n’est pas du tout pareil.
    Par exemple, comment déclarer des variables public accessibles dans toutes les classes.
    J’ai essayé, en vain de les déclarer dans program.cs, car il semble le 1er lancé.
    En gros, je fais des essais qui doivent me servir à apprendre la syntaxe.

    A Jaco67
    Pour cela il faut que ta classe Form1 ait une propriété (disons F2) du type Form2, et que ta classe Form2 ait une propriété (disons F1) du type Form1.
    Oui, mais comment.
    Un petit exemple sera le bienvenu.

    A micka132
    Le plus simple c'est d'ajouter un paramètre dans ton constructeur de Form2(Form1 referenceForm1) , puis de le stocker dans ta classe
    Même remarque que pour Jaco67.

    Pour tout le monde
    J’ai conscience de vous solliciter exagérément, veuillez me pardonner.

    Claude Azoulai

  7. #7
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2012
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2012
    Messages : 50
    Points : 75
    Points
    75
    Par défaut
    Quel est le but réél dans ton exemple ? Car il faut savoir en objet que l'association bidirectionnelle entre classes est fortement déconseillée car cela créé des dépendances. De plus sur des forms, je ne vois pas l’intérêt.

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 93
    Points : 169
    Points
    169
    Par défaut
    Citation Envoyé par Claude_Azoulai Voir le message
    Oui, mais comment.
    Un petit exemple sera le bienvenu.
    Ta classe Form1 doit ressembler à quelque chose comme ça :
    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
    public class Form1 : Form
    {
    	private Form2 f2;
     
    	// Propriété
    	public Form2 F2
    	{
    		get { return f2;}
    		set { f2 = value;}
    	}
     
    	public Form1()
    	{
    		InitializeComponent();
    	}
     
    	// reste de l'implémentation
    }
    ... et quasiment la même chose pour Form2 !

    C'est vraiment pas loin de ce que tu avais proposé, sauf que l'initialisation de la variable se fera en dehors du formulaire (cf mon précédent post).

  9. #9
    Expert confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2009
    Messages
    2 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2009
    Messages : 2 031
    Points : 5 476
    Points
    5 476
    Par défaut
    Voila j'ai repris ton code et ajouté les élements manquant

    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
    namespace Essai_sur_deux_formilaires
    {
     
        public partial class Form1 : Form
        {
            public Form2 frm2 = new Form2(this); // Possible sur Form1, mais pas sur Form2
     
            public Form1()
            {
                InitializeComponent();
            }
     
            private void Form1_Load(object sender, EventArgs e)
            {
               // Ces instructions fonctionnent parfaitement
                frm2.Show();
                frm2.Top = this.Top;
                frm2.Left = this.Left + this.Width;
                frm2.BackColor = Color.Aqua;
            }
     
            private void button1_Click(object sender, EventArgs e)
            {
                // Là aussi sans problème
                frm2.BackColor = Color.Red;
                frm2.MaRoutine();
            }
        }
    }
    Code c# : 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
    namespace Essai_sur_deux_formilaires
    {
        public partial class Form2 : Form
        {
     
            Form1 frm1 ;
            public Form2(Form1 formReference)
            {
                frm1 =formReference;
                InitializeComponent();
            }
     
            private void button1_Click(object sender, EventArgs e)
            {
                //frm1 .BackColor = Color.AliceBlue; //N'est pas accepté par l'éditeur
            }
     
            private void button2_Click(object sender, EventArgs e)
            {
     
                frm1.BackColor = Color.Blue;
                // Aucune action visible. Poutant frm1 est bien définit en 
                //{Essai_sur_deux_formilaires.Form1, Text: Form1}
            }
            public void MaRoutine()
            {
                button1.BackColor = Color.Yellow;
                button2.BackColor = Color.Green;
            }
            private void Form2_Load(object sender, EventArgs e)
            {
     
            }
     
        }
    }

  10. #10
    Membre éclairé Avatar de -N4w4k-
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2011
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 545
    Points : 801
    Points
    801
    Par défaut
    Citation Envoyé par Claude_Azoulai Voir le message
    Néanmoins j’essaye de commencer avec un petit programme extrêmement simple, (du moins en VB.Net). J’ai donc utilisé deux formulaires pour savoir ce que je pouvais en faire en les faisant travailler ensembles.
    Ok donc je pars du principe que tu fais juste un test pour découvrir ce que tu peux faire et comment tu peux le faire. Seulement je suis tout à fait d'accord avec djchou, je vois plus une impasse qu'autre chose

    Je vais peut être m'avancer un peu car je ne connais pas du tout le VB, mais je pense que ce que tu devrais regarder en premier est l'approche orientée objet et ses concepts. D'ailleurs tu devrais te procurer un très bon bouquin nommé Design patterns - Tête la première. Il regroupe tout les principaux design patterns (-> petit cours illustré en java). Fais quelques recherches sur internet et tu verras qu'on en dit le plus grand bien (en général pour son coté non-élitiste). Je ne sais pas si cela t'aidera pour cet exercice en particulier, mais pour ne pas mourir idiot c'est l'idéal

  11. #11
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2012
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2012
    Messages : 50
    Points : 75
    Points
    75
    Par défaut
    Citation Envoyé par -N4w4k- Voir le message
    Je vais peut être m'avancer un peu car je ne connais pas du tout le VB, mais je pense que ce que tu devrais regarder en premier est l'approche orientée objet et ses concepts.
    oui et particulièrement les principes d'encapsulation car il y a quelques erreurs dans ton code (différencier propriétés de classes et attributs)

    Je ne pense pas que un plongeon dans les design patterns dans leur ensemble soit une bonne idée car c'est un sujet très vaste et certains pattern ne sont pas forcement évident à saisir quand tu débute en .NET. Néamoins si tu veux savoir comment organiser le code de tes forms et les interactions entre elles regarde du coté du MVC et le MVP (un peu plus poussé)

  12. #12
    Membre éclairé Avatar de -N4w4k-
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2011
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 545
    Points : 801
    Points
    801
    Par défaut
    Je suis d'accord que pour ce problème ça ne lui sera pas forcement utile. C'est juste que je ne connais pas d'autre moyen facilement abordable de comprendre l'intérêt de l'approche orientée objet (pour moi ça a été un vrai déclic après cette lecture). En plus Claude n'a pas l'air d'avoir peur d'apprendre

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    355
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 355
    Points : 118
    Points
    118
    Par défaut
    Je vous remercie tous de bien vouloir m'aider.

    J'ai essayé la solution proposée par Jaco67 car elle me semblait plus proche de ce que pouvais comprendre.
    Malheureusement je n'ai pas pu l'essayer car le compilateur lève une exception dans chacun des formulaires.

    Il s'agit de la ligne "public class Form1 : Form" pour Form1 et pareil pour Form2.
    Voici l'exception :"Modificateur partiel manquant sur la déclaration de type 'Essai_sur_deux_formilaires.Form1; une autre déclaration partielle de ce type existe"

    J'ai l'impression d'être tout près (grace à vous), peut-être allez vous trouver.
    Voici de nouveau Form1.cs.
    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
     
    namespace Essai_sur_deux_formilaires
    {
     
        public  class Form1 : Form
        {
            private Form2 f2;
            // Propriété
            public Form2 F2
            {
                get { return f2; }
                set { f2 = value; }
            }
     
            public Form1()
            {
                InitializeComponent();
            }
     
            private void Form1_Load(object sender, EventArgs e)
            {
                f2.Show();
                f2.Top = this.Top;
                f2.Left = this.Left + this.Width;
                f2.BackColor = Color.Aqua;
            }
     
            private void button1_Click(object sender, EventArgs e)
            {
                f2.BackColor = Color.Red;
                f2.MaRoutine();
            }
        }
    et Form2.cs
    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
     
    namespace Essai_sur_deux_formilaires
    {
        public class Form2 : Form
        {
            private Form1 f1;
            // Propriété
            public Form1 F1
            {
                get {return f1;}
                set {f1=value;}
            }
            public Form2()
            {
                InitializeComponent();
            }
     
            private void button1_Click(object sender, EventArgs e)
            {
                f1.BackColor = Color.AliceBlue; 
            }
     
            private void button2_Click(object sender, EventArgs e)
            {
                f1.BackColor = Color.Blue;
            }
            public void MaRoutine()
            {
                button1.BackColor = Color.Yellow;
                button2.BackColor = Color.Green;
            }
            private void Form2_Load(object sender, EventArgs e)
            {
            }
        }
    }
    Claude Azoulai

  14. #14
    Expert confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2009
    Messages
    2 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2009
    Messages : 2 031
    Points : 5 476
    Points
    5 476
    Par défaut
    Ce sont des form ils doivent être en partial pour pouvoir associer le code behind.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public partial class Form2 : Form
    En tout cas ca péteras à l’exécution parceque tes forms ne sont pas instanciés.

    Soit tu utilises la solution que j'ai marqués, soit tu peux remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    private void Form1_Load(object sender, EventArgs e)
            {
                F2=new Form2();
                F2.F1=this;
                F2.Show();
                F2.Top = this.Top;
                F2.Left = this.Left + this.Width;
                F2.BackColor = Color.Aqua;
            }
    Note bien que j'utilise F2 et non f2, tu ne dois normalement jamais utilisé f2 dans ton code, sauf dans ta propriété bien sur.
    L'interet est que si un jour tu veux rajouter un control sur le get ou le set de ta propriété tu pourras le faire sereinement. Alors que si tu fais appels directement à f2, alors la ton control ne sera pas effectif dans tout ton code.

  15. #15
    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 442
    Points
    4 442
    Par défaut
    bonjour Claude_Azoulai
    Le probleme que tu poses est loin d'etre trivial, concernant le management de multiples forms dans une appli....

    En fait dans les WinForms (en vb.net comme en c#) le seul moyen est de creer :
    -un class public LibForm dedie à ce travail...
    -dans ce LibForm tu declares une variable pour chaque form y compris le Form de demarrage de ton appli
    -les variables seront en static (partagé en vb.net "shared") ....

    -dans le Load de chaque Form tu assignes aux variables le "this" (Me)...

    - dans le Form principal tu accedes aux autres forms comme d'habitude:
    - declaration + instanciation.....
    - dans les autres pas besoin :tu passes par le LibForm....

    - un class public ManageForm : sert à eviter des plantages et au management des forms (changement de form,couleur etc ...).......
    - pour manager les controls des forms tu utlises la collection Controls de chaque form accede....
    code exemple
    code class LibForm & ManageForm:
    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
     
    namespace WindowsFormsApplication1
    {
        public class LibraryForm
        {
            public static Form   MainForm;
            public static Form   UserForm1;
            public static Form   UserForm2; 
     
        }
     
     
    }
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Drawing;
    using System.Windows.Forms;
     
    namespace WindowsFormsApplication1
    {
       public class ManageForms
       {
           public static void ChangeBackColor(Form frm)
            {
                if (frm == null)
                {
                 MessageBox.Show("The form is not loaded.");
                    return;
                }
                frm.BackColor = Color.DeepSkyBlue; 
           }
           public static void ChangeControl(Control ctrl)
           {
               if (ctrl == null)
               {
                   MessageBox.Show("The form is not loaded.");
                   return;
               }
               ctrl.Text = "myButton";
               ctrl.Font=new Font("Arial",16,FontStyle.Bold);
           }
       }
    }
    code des Forms manages

    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
     
    //MainForm
     
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
     
    namespace WindowsFormsApplication1
    {
        public partial class MainForm : Form
        {
            public MainForm()
            {
                InitializeComponent();
            }
            private void MainForm_Load(object sender, EventArgs e)
            {
                LibraryForm.MainForm = this;
            }
     
     
            private void btnShow_Click(object sender, EventArgs e)
            {
                UserForm1 frm1 = new UserForm1();
                UserForm2 frm2 = new UserForm2();
                frm1.Show();
                frm2.Show();
     
            }
     
            private void btnChangeForm_Click(object sender, EventArgs e)
            {
                ManageForms.ChangeBackColor(LibraryForm.UserForm2);
            }
     
     
     
     
     
     
     
     
        }
    }
    //UserForm2
     
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
     
    namespace WindowsFormsApplication1
    {
        public partial class UserForm1 : Form
        {
            public UserForm1()
            {
                InitializeComponent();
            }
            private void myUserForm1_Load(object sender, EventArgs e)
            {
                LibraryForm.UserForm1 = this;
            }
     
            private void btnHideMainForm_Click(object sender, EventArgs e)
            {
                LibraryForm.MainForm.Hide();
     
            }
     
     
        }
    }
    //UserForm2
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
     
    namespace WindowsFormsApplication1
    {
        public partial class UserForm2 : Form
        {
            public UserForm2()
            {
                InitializeComponent();
            }
            private void UserForm2_Load(object sender, EventArgs e)
            {
                LibraryForm.UserForm2 = this;
            }
     
     
     
            private void btnShowMainForm_Click(object sender, EventArgs e)
            {
                LibraryForm.MainForm.Show();
                LibraryForm.MainForm.Text = "MainForm c.Azoulay";
                LibraryForm .MainForm.BackColor=Color.DarkBlue;
                Control ctrlBtn1= LibraryForm.MainForm.Controls[0];
                ManageForms.ChangeControl(ctrlBtn1);
            }
     
     
     
     
     
     
        }
    }
    bon code..............

  16. #16
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 93
    Points : 169
    Points
    169
    Par défaut
    Comme le dit micka132, il manque le mot-clé "partial" (désolé ne pas l'avoir écrit !). Pour info ce mot-clé permet de mettre le code d'une même classe dans plusieurs fichiers. C'est donc particulièrement utile pour les formulaires (code behind auto-généré par le designer d'un côté, code behind développeur de l'autre) !

    Par contre ça ne pètera pas à l'exécution (contrairement à ce que dit micka132) si tu respectes bien l'ordonnancement que je réécris ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Form1 frm1 = new Form1();
    Form2 frm2 = new Form2();
    frm1.F2 = frm2;
    frm2.F1 = frm1;
    A partir de là tout sera instancié comme il faut !

Discussions similaires

  1. Rafraichir listview du form1 a partir du form2
    Par mactar85 dans le forum Windows Forms
    Réponses: 1
    Dernier message: 30/05/2012, 17h45
  2. Réponses: 4
    Dernier message: 17/06/2010, 13h52
  3. agir sur une vue à partir d'une autre vue
    Par gasper06 dans le forum Flex
    Réponses: 1
    Dernier message: 26/05/2009, 15h13
  4. Réponses: 2
    Dernier message: 16/01/2008, 18h40
  5. [VB.NET]utiliser un composant situé sur form1 sur le form2
    Par Sytchev3 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 31/05/2006, 18h16

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