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 :

modifier un élément d'une form dans une méthode d'une autre form


Sujet :

Windows Forms

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 27
    Points : 20
    Points
    20
    Par défaut modifier un élément d'une form dans une méthode d'une autre form
    Bonjour à tous,

    Je débute en C# et Windows Forms. Je voudrais juste faire une fenêtre dans laquelle un boutton permette d'ouvrir une autre fenêtre, et dans cette autre fenêtre, il y aurait un boutton qui modifierait un élément de la première fenêtre.
    Le problème, c'est que je ne sais pas comment appeler la première fenêtre, vu qu'elle n'a pas vraiment de nom.
    Dans le main, elle est appelée par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.Run(new Form1());
    Quelqu'un peut-il m'aider ?

    Merci d'avance.

  2. #2
    Membre expérimenté Avatar de ctxnop
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2007
    Messages : 858
    Points : 1 732
    Points
    1 732
    Par défaut
    Salut
    Je pense que tu as mal conçut ton application pour avoir ce genre de problème, mais bon.
    La fenêtre principale de l'application peux s'obtenir de cette manière :
    Code csharp : Sélectionner tout - Visualiser dans une fenêtre à part
    System.Windows.Forms.Form frm = System.Windows.Forms.Form.FromHandle(System.Diagnostics.Process.GetCurrentProcess().MainWindowHandle);
    Sinon, tu peux aussi modifier ta classe d'application

    Code chsparp : 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
     
    using System;
    using System.Collections.Generic;
    using System.Windows.Forms;
     
    namespace dev_test_csharp
    {
    	static class Program
    	{
    		private static  MaFormPrincipale _frmMain;
    		public static MaFormPrincipale MainForm { get { return Program._frmMain;} }
     
    		/// <summary>
    		/// Point d'entrée principal de l'application.
    		/// </summary>
    		[STAThread]
    		static void Main()
    		{
    			_frmMain = new MaFormPrincipale();
    			Application.Run(_frmMain);
    		}
    	}
    }

  3. #3
    Membre émérite Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Points : 2 925
    Points
    2 925
    Par défaut
    Citation Envoyé par ctxnop Voir le message
    Sinon, tu peux aussi modifier ta classe d'application
    Ouala lalala, que c'est crado poulo

    Sinon, un truc important : tu dis que ta "fenêtre n'a pas vraiment de nom". C'est normal, aucun objet n'en a. Un objet a juste un certain nombre de références qui redirigent vers lui.

    Si t'as besoin dans la Form2 de manipuler la Form1, rajoute Form1 en paramètre du constructeur de ta Form2.
    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
    class Form1 : Form
    {
      void OnClickTrucMuche(...)
      {
        Form2 f = new Form2(this); //on passe this, qui est une référence vers l'instance de Form1
        ....
      }
    }
     
    class Form2 : Form
    {
       private Form1 _form1;
       // le constructeur de ta Form2 stocke un référence vers une instance de Form1
       public Form2(Form1 f)
       {
          ....
        this._form1 = f;
       }
     
      // et ailleurs, là où tu veux manipuler Form1
       this._form1.Text = "chouette";
    }
    ಠ_ಠ

  4. #4
    Membre expérimenté Avatar de ctxnop
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2007
    Messages : 858
    Points : 1 732
    Points
    1 732
    Par défaut
    Citation Envoyé par Guulh Voir le message
    Ouala lalala, que c'est crado poulo
    Crado ? Je vois pas en quoi. C'est pas parce que Visual Studio génère ce code tout seul lors de la création du projet que tu ne peux la modifier. Rien n'a rien de crado de bien faire sa classe static qui est à la base de toute application.

  5. #5
    Membre émérite Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Points : 2 925
    Points
    2 925
    Par défaut
    Bah une variable statique, c'est une variable globale, puisqu'elle est accessible de partout dans ton appli. Et si on a inventé l'objet, c'est entre autres pour compartimenter le code, en empêchant n'importe qui d'accéder à n'importe quoi.

    Là, tu as dû modifier le main de ton appli juste pour les besoins de Form2. Alors que le Main a une portée beaucoup plus grande que Form2.

    baldebaran étant débutant, son projet est probablement encore simple, et il n'a pas besoin d'appliquer un design super propre et maintenable. Mais sur un projet plus gros, coupler aussi fortement les couches entre elles rend le code vite imbuvable.

    Voilà voilà
    ಠ_ಠ

  6. #6
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 387
    Points : 2 999
    Points
    2 999
    Par défaut
    Citation Envoyé par Guulh Voir le message
    Sinon, un truc important : tu dis que ta "fenêtre n'a pas vraiment de nom". C'est normal, aucun objet n'en a. Un objet a juste un certain nombre de références qui redirigent vers lui.
    Je viens de tester un truc. Projet et Form par défaut (donc Form1).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MessageBox.Show(Application.OpenForms[0].Name);
    ça m'affiche Form1.

    Est-ce que ça ne tendrait pas à dire qu'un formulaire créé prend le nom de sa classe par défaut ?

    D'ailleurs, pour compléter et peut-être faciliter les choses, je viens aussi de tester le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            this.Name = "machin";
        }
     
        private void button1_Click(object sender, EventArgs e)
        {
            MessageBox.Show(Application.OpenForms["machin"].Name);
        }
    }
    qui affiche bien "machin"

    Moyen d'éviter la modification du code généré par défaut dans program.cs

  7. #7
    Membre émérite Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Points : 2 925
    Points
    2 925
    Par défaut
    Oui, en effet Parce qu'il se trouve que les contrôles ont une propriété "Name". Mais ça n'a rien de général, et je ne compterais pas là dessus pour retrouver un objet.

    D'autant plus qui si on ouvre deux fenêtres de type Form1, elles s'appelleront toutes les deux "Form1" On ne peut pas s'en servir pour identifier les objets.
    ಠ_ಠ

  8. #8
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 387
    Points : 2 999
    Points
    2 999
    Par défaut
    Citation Envoyé par Guulh Voir le message
    D'autant plus qui si on ouvre deux fenêtres de type Form1, elles s'appelleront toutes les deux "Form1" On ne peut pas s'en servir pour identifier les objets.
    sauf si on leur donne un nom spécifique comme dans mon complément de message arrivé après ta réponse

  9. #9
    Membre émérite Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Points : 2 925
    Points
    2 925
    Par défaut
    Citation Envoyé par Papy214 Voir le message
    sauf si on leur donne un nom spécifique comme dans mon complément de message arrivé après ta réponse
    Certes Mais ça reste une variable globale. C'est équivalent à la solution proposée par ctxnop.
    ಠ_ಠ

  10. #10
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 387
    Points : 2 999
    Points
    2 999
    Par défaut
    Citation Envoyé par Guulh Voir le message
    Certes Mais ça reste une variable globale. C'est équivalent à la solution proposée par ctxnop.
    Tout à fait ... la seule différence est qu'on ne touche pas à la function Main

Discussions similaires

  1. Réponses: 8
    Dernier message: 18/12/2014, 11h13
  2. Réponses: 4
    Dernier message: 19/11/2014, 16h44
  3. Réponses: 2
    Dernier message: 23/05/2010, 12h45
  4. Réponses: 2
    Dernier message: 09/01/2007, 16h25
  5. Mise en forme dans un RTF via une syntaxe personnelle
    Par sqwalichou dans le forum Autres langages
    Réponses: 2
    Dernier message: 24/02/2006, 22h19

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