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 :

Déclencher automatiquement une fonction.


Sujet :

Windows Forms

  1. #1
    Membre régulier Avatar de Chacha35
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2009
    Messages
    264
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2009
    Messages : 264
    Points : 114
    Points
    114
    Par défaut Déclencher automatiquement une fonction.
    Bonjour,

    Dans une classe de formulaire par exemple la fonction Form_Load se fait automatiquement. Ca doit être lié à un événement.

    Je voudrais que lorsque j'instancie ma classe ( qui n'est pas un formulaire) une fonction se fasse directement.

    Je ne vois pas comment faire.

    Merci d'avance

  2. #2
    Membre régulier Avatar de Tuttu
    Homme Profil pro
    Inactif
    Inscrit en
    Février 2007
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Inactif

    Informations forums :
    Inscription : Février 2007
    Messages : 135
    Points : 123
    Points
    123
    Par défaut
    Dans le code de ton constructeur, tu ne peux pas appeler la fonction que tu souhaites effectuer ?

    Je ne sais pas si c'est la meilleure solution, mais en tant que débutant, c'est ce que je ferai.

    Un avis d'expert ?

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    23
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 23
    Points : 24
    Points
    24
    Par défaut
    Citation Envoyé par Tuttu Voir le message
    Dans le code de ton constructeur, tu ne peux pas appeler la fonction que tu souhaites effectuer ?

    Je ne sais pas si c'est la meilleure solution, mais en tant que débutant, c'est ce que je ferai.

    Un avis d'expert ?
    Je rejoins la réponse Tuttu en ajoutant la seule nuance suivante : si la méthode que tu veux appeler utilise des contrôles que tu as disposés sur la form, il faut veiller à l'appeler après 'InitializeComponent();' (dans le constructeur).

  4. #4
    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 Chacha35 Voir le message
    Dans une classe de formulaire par exemple la fonction Form_Load se fait automatiquement.
    Plus précisément, elle est abonnée à l'événement Load de la Form, qui se déclenche quand la form devient visible (c'est à dire après un Show ou un ShowDialog).

    De façon plus générale, comme les autres l'ont dit, pour toute classe, c'est le constructeur qui est appelé à l'instanciation. Lui-même peut appeler une autre méthode, si besoin.
    ಠ_ಠ

  5. #5
    Membre régulier Avatar de Chacha35
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2009
    Messages
    264
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2009
    Messages : 264
    Points : 114
    Points
    114
    Par défaut
    Effectivement c'est ça mais j'ai encore des soucis.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
        static class Program
        {
     
            [STAThread]
            static void Main()
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Classes.Surveillant oSurveillant = new Classes.Surveillant();
            }
     
        }
    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 Surveillant
        {
            public delegate void MiseAJoursHandler(object sender, Classes.MiseAJoursEventArgs maj);
            public event MiseAJoursHandler MiseAJours;   
     
            public F_ConsultSearch ConsultSearch = new F_ConsultSearch();
            public F_ConsultRef ConsultRef = new F_ConsultRef();
     
            public string RefInt;
            public string NomInt;
     
            //InitializeComponent();
     
            public Surveillant()
            {
                ConsultSearch.Show();
                ConsultRef.Show();
                Application.OpenForms[0].Focus();
            }
       }
    Je compile pas-à-pas, il rentre bien dans Surveillant() il montre mes 2 formulaires mais après il sort de la classe Surveillant et du Main. Et l'application se ferme donc.

    Je voudrai que mes deux formulaires restent ouverts.

  6. #6
    Membre émérite
    Avatar de laedit
    Homme Profil pro
    Consultant études et développement
    Inscrit en
    Décembre 2006
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant études et développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 344
    Points : 2 265
    Points
    2 265
    Par défaut
    Il faudrait que tu fasse un Application.Run dans la méthode Main, mais tu devras lui indiquer un formulaire.

    Comme on l'avait dit lors d'un précédent post si je me souviens bien, tu lanceras le deuxième à partir du constructeur du premier.
    Blog - Articles - Framework

    MSDN vous aide, si si, alors n'hésitez pas à y faire un tour avant de poser une question.
    Ah, et n'oubliez pas, Google peut répondre à la majorité de vos questions.

  7. #7
    Membre régulier Avatar de Chacha35
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2009
    Messages
    264
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2009
    Messages : 264
    Points : 114
    Points
    114
    Par défaut
    Oui c'est ce que je fesais avant, mais cela ne me convient plus.

    Je souhaite que tout passe par ma classe Surveilant car pour l'instant j'ai 2 formulaires mais après j'en aurai des dixaines.

    Si je fais une application.run dans Surveillant je crée un ojbjet Form1 mais je ne connait pas sont nom et je ne peut pas ouvrir en même temps le Form2 car je ne souhaite pas l'ouvrir dans le Form1.

    J'aimerai que ce soit Surveillant qui ouvre et ferme les formulaires.

  8. #8
    Membre émérite
    Avatar de laedit
    Homme Profil pro
    Consultant études et développement
    Inscrit en
    Décembre 2006
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant études et développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 344
    Points : 2 265
    Points
    2 265
    Par défaut
    Dans ce cas là, regarde du côté de ApplicationContext, vu que c'est le deuxième objet que tu peux passer en paramètre de Application.Run.

    http://msdn.microsoft.com/en-us/libr...8VS.80%29.aspx
    Blog - Articles - Framework

    MSDN vous aide, si si, alors n'hésitez pas à y faire un tour avant de poser une question.
    Ah, et n'oubliez pas, Google peut répondre à la majorité de vos questions.

  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 Chacha35 Voir le message
    je crée un objet Form1 mais je ne connait pas son nom
    Répète après moi : un objet n'a pas de nom.

    Encore une fois : un objet n'a pas de nom.

    A écrire 100x dans ton cahier pour demain, sans faute

    Ce que le designer génère automatiquement, c'est effectivement Application.Run(new MaSuperChouetteForm()).
    Rien ne t'interdit de le couper en deux si tu veux une référence à cette fenêtre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    MaSuperChouetteForm f = new MaSuperChouetteForm();
    Application.Run(f);
    ಠ_ಠ

  10. #10
    Membre régulier Avatar de Chacha35
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2009
    Messages
    264
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2009
    Messages : 264
    Points : 114
    Points
    114
    Par défaut
    Merci pour les réponses.

    Il va me falloir un peu de temps pour comprendre Apllicationcontexte. Ca a l'air complexe. Je regarde ça.


    Ok c'est pas le nom de l'objet c'est le nom du pointeur qui pointe sur l'objet.

    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
     
     
        class Surveillant
        {
            public delegate void MiseAJoursHandler(object sender, Classes.MiseAJoursEventArgs maj);
            public event MiseAJoursHandler MiseAJours;   
     
            public F_ConsultSearch ConsultSearch = new F_ConsultSearch();
            public F_ConsultRef ConsultRef = new F_ConsultRef();
     
            public string RefInt;
            public string NomInt;
     
            //InitializeComponent();
     
            public Surveillant()
            {
                Application.Run(ConsultSearch);
                Application.Run(ConsultRef);
                Application.OpenForms[0].Focus();
     
            }
    }
    Ca marche mais mon deuxième formulaire ne s'ouvre pas (logique).

  11. #11
    Membre émérite
    Avatar de laedit
    Homme Profil pro
    Consultant études et développement
    Inscrit en
    Décembre 2006
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant études et développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 344
    Points : 2 265
    Points
    2 265
    Par défaut
    Tu ne dois avoir qu'un seul Application.Run et il doit se trouver dans la méthode Main.

    Comme je te l'ai dit, penche toi plutôt sur l'ApplicationContext.
    Blog - Articles - Framework

    MSDN vous aide, si si, alors n'hésitez pas à y faire un tour avant de poser une question.
    Ah, et n'oubliez pas, Google peut répondre à la majorité de vos questions.

  12. #12
    Membre régulier Avatar de Chacha35
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2009
    Messages
    264
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2009
    Messages : 264
    Points : 114
    Points
    114
    Par défaut
    C'est bon ça marche avec le contesxte mais j'ai encore un bug.

    Voila le code:

    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
     
     
    static class Program
        {
     
            [STAThread]
            static void Main()
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
     
                // Create the MyApplicationContext, that derives from ApplicationContext,
                // that manages when the application should exit.
                Classes.Surveillant oSurveillant = new Classes.Surveillant();
     
     
     
                // Run the application with the specific context. It will exit when
                // all forms are closed.
                Application.Run(oSurveillant);
     
            }
    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
     
     
    public class Surveillant : ApplicationContext
        {
            public delegate void MiseAJoursHandler(object sender, Classes.MiseAJoursEventArgs maj);
            public event MiseAJoursHandler MiseAJours;   
     
            public string RefInt;
            public string NomInt;
     
            private int formCount;
            private  F_ConsultSearch ConsultSearch;
            private F_ConsultRef ConsultRef;
     
            public Surveillant()
            {
                formCount = 0;
     
                // Create both application forms and handle the Closed event
                // to know when both forms are closed.
                ConsultSearch = new F_ConsultSearch();
                ConsultSearch.Closed += new EventHandler(OnFormClosed);          
                formCount++;
     
                ConsultRef = new F_ConsultRef();
                ConsultRef.Closed += new EventHandler(OnFormClosed);                       
                formCount++;
     
                // Show both forms.
                ConsultSearch.Show();
                ConsultRef.Show();
            }
     
            public void OnFormClosed(object sender, EventArgs e)
            {
                // When a form is closed, decrement the count of open forms.
     
                // When the count gets to 0, exit the app by calling
                // ExitThread().
                formCount--;
                if (formCount == 0)
                {
                    ExitThread();
                }
            }
     
            public void Signaler(string R, string DP)
            {
                // Fonction qui déclenche l'événement MiseAJours
                this.MiseAJours += new Surveillant.MiseAJoursHandler(ConsultRef.OnMiseAJours);
     
                Classes.MiseAJoursEventArgs majEventArgs = new Classes.MiseAJoursEventArgs(R, DP);
                if (MiseAJours != null) MiseAJours(this, majEventArgs);
            }
     
        }
    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 partial class F_ConsultSearch : Form 
        {
            public Classes.Surveillant oSurveillant;
    (...)
    
    private void Txt_RefInt_KeyPress(object sender, KeyPressEventArgs e)
            {   
    (...)
    
    //La référence d'objet n'est pas définie à une instance d'un objet.
                    oSurveillant.Signaler(Txt_RefInt.Text, (string)Grid_Ref.SelectedRows[0].Cells["ITDSC"].Value);
            }
    
    (...)
    Je comprend bien qu'il ne reconnait pas le oSurveillant que j'ai instancié dans Program mais je ne vois pas comment faire.

  13. #13
    Membre émérite
    Avatar de laedit
    Homme Profil pro
    Consultant études et développement
    Inscrit en
    Décembre 2006
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant études et développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 344
    Points : 2 265
    Points
    2 265
    Par défaut
    Bah comme on l'a dit et redit et répéter, il te faut une instance du surveillant dans ta form, donc peux par exemple la passer dans le constructeur de la form, ce qui donnera 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 Surveillant()
            {
                formCount = 0;
     
                // Create both application forms and handle the Closed event
                // to know when both forms are closed.
                ConsultSearch = new F_ConsultSearch();
                ConsultSearch.Closed += new EventHandler(OnFormClosed);          
                formCount++;
     
                ConsultRef = new F_ConsultRef(this);
                ConsultRef.Closed += new EventHandler(OnFormClosed);                       
                formCount++;
     
                // Show both forms.
                ConsultSearch.Show();
                ConsultRef.Show();
            }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public partial class F_ConsultSearch : Form 
        {
            private Classes.Surveillant oSurveillant;
            public F_ConsultSearch(Surveillant surveillant)
            {
                this.oSurveillant = surveillant;
                ...
            }
            ...
    }
    Il ne suffit pas de déclarer un champ en public avec le même nom qu'une autre variable dans le projet pour faire un lien entre les deux...
    Blog - Articles - Framework

    MSDN vous aide, si si, alors n'hésitez pas à y faire un tour avant de poser une question.
    Ah, et n'oubliez pas, Google peut répondre à la majorité de vos questions.

  14. #14
    Membre régulier Avatar de Chacha35
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2009
    Messages
    264
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2009
    Messages : 264
    Points : 114
    Points
    114
    Par défaut
    Effectivement on me l'avait déjà dit. Mais je suis longue à la détente.

    Merci beaucoup

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

Discussions similaires

  1. Continuer automatiquement une fonction excel jusqu a la derniere ligne
    Par bakaouf dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 30/07/2010, 12h58
  2. Déclencher automatiquement une impression
    Par guidav dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 19/01/2009, 12h01
  3. Déclencher automatiquement une page
    Par ctobini dans le forum Langage
    Réponses: 2
    Dernier message: 01/08/2008, 17h27
  4. Réponses: 3
    Dernier message: 11/07/2006, 17h45
  5. Réponses: 4
    Dernier message: 01/07/2004, 19h15

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