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 :

Utiliser du code depuis une page class.cs


Sujet :

Windows Forms

  1. #1
    Membre averti Avatar de BRUNO71
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2007
    Messages
    502
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 502
    Points : 319
    Points
    319
    Par défaut Utiliser du code depuis une page class.cs
    Bonjour et bonne année à vous,
    Besoins d'un complément d'information sur la création d'une page class.
    Pour simplifier mon code depuis ma page principale j'aimerais si possible créer une nouvelle page nommée Fichier_Codes.cs.
    j'ai écrit un petit code pour tester, voici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     class Fichier_Codes
        {
     
            public void ViderTextBox()
     
            {
                 MessageBox.show("ok ça marche");
            }
     
        }
    Depuis ma page principale j'ai écrit ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
            Fichier_Codes Effacer = new Fichier_Codes();
             Effacer.ViderTextBox();
    Sur un bouton cela fonctionne bien, le message apparaît.
    ça ce complique avec des Textbox, car le but étant de vider des Texbox depuis ma page principale.
    Si je remplace le messagebox dans ma page cs par ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     class Fichier_Codes
        {
     
            public void ViderTextBox()
     
            {
                 Page_Principale Page_Principale = new Page_Principale();
                Page_Principale.Num_ligne.Text = "";
            }
     
        }
    Je n'ai aucun message, mais les textbox ne se vident pas..
    Comment faut-il déclarer mes textbox depuis ma page cs ?

    Merci pour vos explications.
    Bruno

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2009
    Messages
    2 025
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    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 025
    Points : 5 462
    Points
    5 462
    Par défaut
    C'est parcequ'en faisant "Page_Principale Page_Principale = new Page_Principale();" , tu créé une nouvelle page principale qui n'est pas celle que tu vois.
    Il faut que ta classe Fichier_Codes ait une référence vers la "vrai" page principale.
    Pour cela tu peux ajouter un argument au constructeur :
    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
     class Fichier_Codes
        {
            Page_Principale _pagePrincipale;
     
            public Fichier_Codes(Page_Principale page_principale) 
            {
                 _pagePrincipale=page_principale;
            }
     
           public void ViderTextBox() 
            {
                 _pagePrincipale.Num_ligne.Text = "";
            }
     
        }
    Mais je te déconseille de faire cela, tu introduis ce que l'on appelle un "couplage fort" qui fait que lorsque tu vas modifier ta page_principale (changement du nom du textbox par exemple) tu dois faire ta modification dans la class Page_Princiale.
    Il vaut mieux rester à un niveau plus haut et passer en argument de ViderTextBox directement un Textbox.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     class Fichier_Codes
        {
     
            public void ViderTextBox(TextBox txtbox) 
            {
     
                txtbox.Text = "";
            }
     
        }
    ............
           Fichier_Codes Effacer = new Fichier_Codes();
           Effacer.ViderTextBox(Num_ligne);
    En plus tu peux réutiliser ta fonction sur n’importe quel autre textbox :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     Effacer.ViderTextBox(uneTextbox);
     Effacer.ViderTextBox(uneAutreTextbox);
     Effacer.ViderTextBox(encoreUneAutreTextbox);

  3. #3
    Membre averti Avatar de BRUNO71
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2007
    Messages
    502
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 502
    Points : 319
    Points
    319
    Par défaut
    Bonjour micka132,

    Merci pour ton aide.
    Lorsque l'on développe sous Access par exemple en VBA on peut créer un Module, lui ajouter du code et l'utiliser dans les autres page par une simple ligne.
    Débutant en C# je pensait que c'était possible avec une (page.cs).
    A la rigueur j'ai plus vite fait de rester dans la même page et de réutiliser la ligne comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ViderTextBox(); // dans plusieurs endroit de ma page selon les besoins
    en utilisant ce type de code par exemple...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     public void ViderTextBox()
            {   
    // tout mon code ici en bas de ma page
            }
    A moins qu'il existe une façon simple de mettre du code ailleurs et de l'utiliser le cas échéant.

    Merci beaucoup,

    Bruno

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2009
    Messages
    2 025
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    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 025
    Points : 5 462
    Points
    5 462

  5. #5
    Membre averti Avatar de BRUNO71
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2007
    Messages
    502
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 502
    Points : 319
    Points
    319
    Par défaut
    Bonsoir,

    Là ça se gâte pour moi, ça parle de classe static et de membre de classe Static...de singleton... c'est un film d'horreur !

    Je viens d'essayer dans le fichier Program.cs => d'ailleurs est-ce correcte d'écrire du code dans ce fichier ?.

    Je rencontre le même soucis, c'est à dire avec un MessageBox ça fonctionne, mais pas avec des TextBox.
    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
     
    static class Program
        {
     
            /// <summary>
            /// Point d'entrée principal de l'application.
            /// </summary>
            [STAThread]
            static void Main()
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(new Page_Principale());
     
            }
     
           public static void ViderTextBox()
            {
     
                Num_ligne.Text  = "";
            }
     
        }
    Le but de ma recherche étant d'éviter les copier/coller dans le code et surtout de maximiser la réutilisation.

    J'ai bien déclaré dans la propriété des TextBox modifier à Public.

    Comment déclarer les TextBox depuis un fichier code cs ?

    J'ai essayé comme ceci, mais sans succès :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        public static void ViderTextBox(Page_Principale Essai)
            {
     
                Essai.Num_ligne.Text  = ""; 
            }
    J'ai regardé également dans l'intanciation... ...j'ai l’impression que l'on ne peut pas utiliser à ce niveau, de Textbox comme dans mon cas.
    Des messagebox, des maths pas de soucis..

    Merci beaucoup pour ton aide....

    Bruno

  6. #6
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 668
    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 668
    Points : 5 237
    Points
    5 237
    Par défaut
    Déjà, si tu veux que ce soit réutilisable, ce n'est pas la forme qu'il faut passer mais la TextBox.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public static void ViderTextBox(TextBox sender)
    {
        sender.Text  = ""; 
    }
    Ensuite, il ne faut pas déclarer dans la classe programme.
    Tu peux soit déclarer la méthode dans la classe Page_Principale, soit créer une nouvelle classe Helper contenant cette méthode que tu réutiliseras dans toutes tes formes.

    Cependant, te compliques bien là vie pour simplement vider une TextBox !!!
    Selon toi quelle est la différence entre ces deux codes mis à part la complexification (parce que d'après ce que je lis, c'est ce que tu cherches à faire) ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    // Code 1
    TextBox1.Text = "";
    TextBox2.Text = "";
    TextBox2.Text = "";
     
    // Code 2
    ViderTextBox(TextBox1);
    ViderTextBox(TextBox2);
    ViderTextBox(TextBox3);

  7. #7
    Membre averti Avatar de BRUNO71
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2007
    Messages
    502
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 502
    Points : 319
    Points
    319
    Par défaut
    Bonjour Popo,
    Merci pour tes explications...
    Pour être honnêtes, je ne comprends pas tout…, autodidacte, je programme seul dans mon coins et qui plus est, je débute en c#.
    Je n’ai hélas pas de réponse à t’apporter sur la différence entre les deux codes…
    Je me doute que la réponse simple serait de te dire qu’il n’y a pas de différence, alors que c’est probablement le contraire…
    Pour l’instant c’est encore complexe je vais rester sur ma page principale.
    Merci à vous,
    Bruno

  8. #8
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 668
    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 668
    Points : 5 237
    Points
    5 237
    Par défaut
    Citation Envoyé par BRUNO71 Voir le message
    Bonjour Popo,
    Merci pour tes explications...
    Pour être honnêtes, je ne comprends pas tout…, autodidacte, je programme seul dans mon coins et qui plus est, je débute en c#.
    Je n’ai hélas pas de réponse à t’apporter sur la différence entre les deux codes…
    Je me doute que la réponse simple serait de te dire qu’il n’y a pas de différence, alors que c’est probablement le contraire…
    Pour l’instant c’est encore complexe je vais rester sur ma page principale.
    Merci à vous,
    Bruno
    Bingo, tu as trouvé.
    Il n'y a aucune différence.
    Ce que tu veux faire est juste un moyen compliqué d'obtenir le même résultat pour n'effacer qu'une seule TextBox

    Si ce que tu cherches à faire est d'effacer d'un coup plusieurs TextBox dans ta fenêtre, alors oui ça vaut le coup.
    Par contre, ce ne sera pas utilisable sur une autre forme mais uniquement dans la forme Page_Principale.
    Pour cela, il faut déclarer ta méthode ViderTextBox dans la classe Page_Principale (mais pas en static)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public class Page_Principale 
    {
     
        // Ce commentaire remplace le code que tu as déjà dans la classe
     
        private  void ViderTextBoxes()
        {
            TextBox1.Text = "";
            TextBox2.Text = "";
            TextBox2.Text = "";
        }
    }
    Edit :
    Si tu souhaite une méthode réutilisable quelque soit la forme qui contient les TextBoxes, tu pourrait créer une classe statique contenant une méthode statique prenant en paramètre un IEnumerable<TextBox>.
    Cependant, et ce n'est que mon avis personnel, ce n'est pas une bonne pratique.
    Il y a des cas où une telle classe Helper peut s'avérer intéressante mais pas dans celui là.

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

Discussions similaires

  1. [Mappy] Utiliser l'API depuis une page en HTTPS
    Par slym06 dans le forum Bibliothèques & Frameworks
    Réponses: 0
    Dernier message: 24/01/2013, 21h44
  2. [Flex3] Utiliser un objet depuis une autre page MXML
    Par cairon59 dans le forum MXML
    Réponses: 4
    Dernier message: 11/08/2010, 16h50
  3. [TinyMCE] Comment utiliser file_browser_callback pour ouvrir une page popup depuis advlink ?
    Par Alexandrebox dans le forum Bibliothèques & Frameworks
    Réponses: 1
    Dernier message: 10/07/2009, 14h31
  4. Appel d'une classe C# depuis une page ASPX
    Par grafaa dans le forum C#
    Réponses: 4
    Dernier message: 03/07/2009, 18h52
  5. Réponses: 2
    Dernier message: 13/05/2008, 10h02

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