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 :

Acceder aux propriétés d'un control d'une autre form


Sujet :

C#

  1. #1
    Futur Membre du Club
    Inscrit en
    Juin 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 7
    Points : 6
    Points
    6
    Par défaut Acceder aux propriétés d'un control d'une autre form
    Je suis débutant en c#.
    Voilà, j'ai une fenetre principal (Princip) qui a partir d'un Button(OK) fait appel à une autre fenetre (Form2) tout en mettant OK.enabled=false.
    La fenetre Form2 s'ouvre sans probleme et le bouton ok devient gris.
    maintanant avant de fermer la fenetre Form2, je doit acceder au button Ok pour le rendre a true (Ok.enabled=true).
    NB :
    Le bouton ok est déclaré Public.

  2. #2
    Membre expérimenté Avatar de bizet
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2005
    Messages
    717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 717
    Points : 1 338
    Points
    1 338
    Par défaut
    Salut,

    La solution est d'utilisée un delegate.
    Il y a quelques semaines, un très bon tuto avait été écrit sur le site developpez.net, mais je ne le retrouve pas.

    Voici quand meme une explication de la FAQ.

    http://dotnet.developpez.com/faq/asp...p/?page=events

  3. #3
    Rédacteur/Modérateur
    Avatar de Skalp
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 694
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 694
    Points : 2 927
    Points
    2 927
    Par défaut
    Il y a plusieurs possibilités.
    Voici celle qui me parait la plus propre. Elle utilise les évènements natifs d'une fenêtre :
    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
    private void button1_Click(object sender, EventArgs e)
    {
        Form2 f2 = new Form2();
        // Evènement déclenché au chargement de Form2 :
        f2.Load += new EventHandler(f2_Load);
        // Evènement déclenché lorsque Form2 est fermée :
        f2.FormClosed += new FormClosedEventHandler(f2_FormClosed);
     
        // Afficher Form2 :
        f2.Show();
    }
     
    private void f2_Load(object sender, EventArgs e)
    {
        this.button1.Enabled = false;
    }
     
    private void f2_FormClosed(object sender, FormClosedEventArgs e)
    {
        this.button1.Enabled = true;
    }

  4. #4
    Futur Membre du Club
    Inscrit en
    Juin 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par khaled_mechkak Voir le message
    Je suis débutant en c#.
    Voilà, j'ai une fenetre principal (Princip) qui a partir d'un Button(OK) fait appel à une autre fenetre (Form2) tout en mettant OK.enabled=false.
    La fenetre Form2 s'ouvre sans probleme et le bouton ok devient gris.
    maintanant avant de fermer la fenetre Form2, je doit acceder au button Ok pour le rendre a true (Ok.enabled=true).
    NB :
    Le bouton ok est déclaré Public.
    Merci beaucoups Skalp.
    Mon probléme est d'accéder à tous les contrôles (TextBox, CheckBox, etc..) de la fenêtre principal (Princip) pour y changer leurs propriétés et leurs valeurs sans utiliser l'évenement de fermeture.

  5. #5
    Rédacteur/Modérateur
    Avatar de Skalp
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 694
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 694
    Points : 2 927
    Points
    2 927
    Par défaut
    Citation Envoyé par khaled_mechkak Voir le message
    Mon probléme est d'accéder à tous les contrôles (TextBox, CheckBox, etc..) de la fenêtre principal (Princip) pour y changer leurs propriétés et leurs valeurs sans utiliser l'évenement de fermeture.
    Dans Form2, tu veux pouvoir accéder et modifier tous les contrôles de Form1, c'est ça ?

    Dans ce cas, il te faut passer tous tes contrôles de Form1 en public. Pour cela, il suffit de modifier la propriété "Modifiers" en mode Design et la mettre en public pour chaque contrôle auquel tu veux accéder depuis Form2.
    Ensuite, quand tu lances Form2, tu fais :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Form2 f2 = new Form2();
    // Afficher Form2 :
    f2.Show(this);
    "this" étant l'instance de Form1.

    Dans Form2, tu peux ainsi accéder aux propriétés de Form1 :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public Form2()
    {
        InitializeComponent();
     
        Form1 f1 = (Form1)this.Owner;
        f1.button1.Enabled = false;
        //...
    }

  6. #6
    Futur Membre du Club
    Inscrit en
    Juin 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par khaled_mechkak Voir le message
    Merci beaucoups Skalp.
    Mon probléme est d'accéder à tous les contrôles (TextBox, CheckBox, etc..) de la fenêtre principal (Princip) pour y changer leurs propriétés et leurs valeurs sans utiliser l'évenement de fermeture.
    J'ai essayé ta soulution mais n'a pas aboutie. Un message d'erreur
    NullReferenceException was unhandled
    est apparu.
    Voici le code en sa totalité.

    Pour la Form1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public partial class Form1 : Form
    {
      public Form1()
      {
         initializeConponent();
      }
     
      private void button1_Click(objet sender, EventArgs e)
      {
          Form2 f2=new Form2();
          f2.show(this);
       }

    Pour la Form2

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public partial class Form2 : Form
    {
       public Form2()
       {
         InitializeConponent();
         Form1 f1=(Form1) this.Owner;
         f1.textbox1.text="Modifiers la textbox1 de la Form1";
       }
    }

    textbox1 de la Form1 est déclarée public dans la proprité "Modifiers"

    aussi est-ce possible de commenter le code.
    Merci bien

  7. #7
    Rédacteur/Modérateur
    Avatar de Skalp
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 694
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 694
    Points : 2 927
    Points
    2 927
    Par défaut
    Citation Envoyé par khaled_mechkak Voir le message
    J'ai essayé ta solution mais n'a pas aboutie. Un message d'erreur est apparu.
    Oui, effectivement ! J'ai répondu un peu trop vite.
    En fait, le constructeur Form2() est appelé avant f2.show(this), donc this.Owner est nul dans Form2.

    Pour corriger cela, tu dois faire :
    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
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
     
        private void button1_Click(object sender, EventArgs e)
        {
            // Passer l'instance de Form1 en argument du constructeur de Form2 :
            Form2 f2 = new Form2(this);
            // Afficher Form2 :
            f2.Show();
        }
    }
    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
    public partial class Form2 : Form
    {
        private Form1 _Form1;
     
        public Form2(Form1 form1)
        {
            InitializeComponent();
            // Sauvegarder l'instance de Form1 :
            this._Form1 = form1;    
     
            // Donc, n'importe quand dans Form2, tu peux faire :
            this._Form1.textbox1.Text = "Modifiers la textbox1 de la Form1";
        }
    }

  8. #8
    Membre habitué
    Homme Profil pro
    Passioné ...
    Inscrit en
    Juillet 2020
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Allier (Auvergne)

    Informations professionnelles :
    Activité : Passioné ...
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2020
    Messages : 145
    Points : 158
    Points
    158
    Par défaut
    Bonjour !
    J'étais justement en train de potasser la dessus ... Merci mille fois ça marche nickel .... ( je voulais désactiver un timer qui tourne sur une form " menu " dés qu'une autre form est lancée et en employant de procedé tout est ok ) merci encore !!!Amitiés à toutes et tous Denis

  9. #9
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 674
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 674
    Points : 5 259
    Points
    5 259
    Par défaut
    Il y a certainement quelque chose qui m'échappe.
    Mais si le but est de ne pas pouvoir revenir sur la fenêtre 1 tant que la 2 n'a pas été fermée, il suffit d'ouvrir la 2 avec ShowDialog.

Discussions similaires

  1. Utiliser les controles d'une autre form
    Par andrebernard dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 04/10/2010, 18h34
  2. ajouter des controles sur une autre form
    Par kineton dans le forum Windows Forms
    Réponses: 4
    Dernier message: 06/10/2009, 10h32
  3. Réponses: 2
    Dernier message: 09/11/2007, 15h32
  4. [C#] Modifier Propriété d'un contrôle d'une autre Form
    Par sara21 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 16/09/2006, 20h41
  5. [C#2.0]Dupliquer des controles sur une autre form
    Par chnew dans le forum Windows Forms
    Réponses: 5
    Dernier message: 12/05/2006, 09h05

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