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 :

Variables globales C# / Accès aux contrôles d'une forme.


Sujet :

C#

  1. #1
    Membre actif Avatar de tssi555
    Analyse système
    Inscrit en
    Juillet 2008
    Messages
    594
    Détails du profil
    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Juillet 2008
    Messages : 594
    Points : 295
    Points
    295
    Par défaut Variables globales C# / Accès aux contrôles d'une forme.
    Bonjour,

    En VB.NET, on déclare une variable globale dans un module, et on la manipule partout dans le projet.
    Quel est l'équivalent de cela en C#?
    J'ai fais recours à une solution "provisoire?" en déclarant mes variables en public statique dans la class Program, puis j'y accède partout dans le projet en écrivant Program.MaVariable, est-ce la bonne manière ?

    En VB.NET, pour accéder à un contrôle (objet) Text1.Text de Form1, c'était en général le NomDeLaForm.NomDuControl. Je ne parviens pas à faire pareil en C#, les contrôles sont crée en private par le designer.
    Quel est l'équivalent de cela en C#?
    J'ai procédé autrement à mon mode, mais je ne sais pas si je suis sur la bonne piste. J'applique un Get sur le contrôle en le rendant public mais je ne suis pas sûr que ce serait le plus propre.

    D'avance merci.

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 180
    Points : 4 496
    Points
    4 496
    Par défaut
    Citation Envoyé par tssi555 Voir le message
    Bonjour,

    En VB.NET, on déclare une variable globale dans un module, et on la manipule partout dans le projet.
    Quel est l'équivalent de cela en C#?
    J'ai fais recours à une solution "provisoire?" en déclarant mes variables en public statique dans la class Program, puis j'y accède partout dans le projet en écrivant Program.MaVariable, est-ce la bonne manière ?
    Euh oui C'est la bonne manière, mais on essaye d'avoir le moins possible recourt aux variables globales.
    De plus on aura plus tendance a créer plusieurs petites classes statiques. (ou utiliser l'appConfig)
    Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public static class DbConnnection
    {
    public static string ConnectionString{get;set}
    }
    Citation Envoyé par tssi555 Voir le message
    En VB.NET, pour accéder à un contrôle (objet) Text1.Text de Form1, c'était en général le NomDeLaForm.NomDuControl. Je ne parviens pas à faire pareil en C#, les contrôles sont crée en private par le designer.
    Quel est l'équivalent de cela en C#?
    J'ai procédé autrement à mon mode, mais je ne sais pas si je suis sur la bonne piste. J'applique un Get sur le contrôle en le rendant public mais je ne suis pas sûr que ce serait le plus propre.
    D'avance merci.
    C'est la méthode VB6, pas VB.Net au mieux de mauvaise pratique hérité de VB6
    Soit tu passes des arguments à ta form en définisant un nouveau constructeur
    Soit tu crées des propriétés comme tu l'as fait.
    Euh le plus joli est de crée une propriété sur le .Text par exemple que sur le controle
    une autre est de crée une propriété qui renvois un objet
    exemple ma FormEtudiant avec des texbox nom,prénom,datedenaisse à une methode GetEtudiant() qui fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public Etudiant GetEtudiant()
    {
    Etudiant myEtudiant = new Etudiant()
    myEtudiant.Nom = tbNom.Text;
    myEtudiant.Prenom = tbPrenom.Text;
    return myEtudiant;
    }
    Attention que les propriétés de la form n'existe plus quand tu fermes la forme

    Une autre méthode, et nettement plus élégante est d'utilisé les delegates pour la communication entre tes forms communication between form

  3. #3
    Membre expert
    Avatar de GuruuMeditation
    Homme Profil pro
    .Net Architect
    Inscrit en
    Octobre 2010
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net Architect
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Points : 3 568
    Points
    3 568
    Par défaut
    Je ne connais pas trop vb mais je pense que effectivement l'équivalent pour variable globale est la classe statique.

    Pour le second point, si je me rappelle bien, il y a une propriété "modifier" (ou un truc du genre) dans le designer qui permet de mettre les contrôles en public. Cependant je ne conseille pas et suggère de passer plutôt par des propriétés/ méthodes.

  4. #4
    Membre actif Avatar de tssi555
    Analyse système
    Inscrit en
    Juillet 2008
    Messages
    594
    Détails du profil
    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Juillet 2008
    Messages : 594
    Points : 295
    Points
    295
    Par défaut
    Merci Benoit, merci Olivier,

    C'est vrai qu'à la base, je viens du monde VB6, puis passé au VB.NET. période dans laquelle j'ai hérité pas mal de pratiques reliées au VB6, dont j'essaye de me défaire en programmant actuellement en C#.

    Pour le mot clé "static", j'ai lu certaines définitions sur le net, mais je ne pense pas avoir assimilé tout le concept, ou plutôt son utilité.
    Pourriez-vous m’éclairer là dessus?

    D'autre part, quand je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public string NameServer
    {
    get { return txtNameServer.Text; }
    }
    -si j'ajoute le mot clé "static" après "public", txtNameServer devient invisible dans la liste, une fois retiré j'ai accès au contrôle.

  5. #5
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 180
    Points : 4 496
    Points
    4 496
    Par défaut
    Static c'est pour définir quelque chose de globale.

    Tu peux définir une classe static alors tout ses méthodes/propriétés seront unique

    Au niveau d'une propriété/méthode/champs celui-ci sera commun alors à toute les classes

    Exemple un compteur qui serait en static

    Une méthode/propriété static ne peut appeller que des methodes/propriété/champs static

    une méthode static s'appelle via la class et non une instance de la class
    Etudiant.Compteur et non myEtudiant.Compteur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public string NameServer
    {
    get { return txtNameServer.Text; }
    }
    tu ne peux pas car tu fais appelle a txtNameServeur qui est une variable non static.
    txtNameServeur dépend de ta forme actuel.
    Tu peux imaginer lancer 2 fois la meme form et mettre dans txtNameServeur deux valeurs différentes

  6. #6
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Citation Envoyé par BenoitM Voir le message
    Static c'est pour définir quelque chose de globale.
    Dans le cas d'une classe, en général oui, mais pas obligatoirement. Dans le cas une méthode ou d'un membre, pas forcément non plus : une méthode ou un membre "private static" est courant.

    Equivalent VB.Net : Shared

    Tu peux définir une classe static alors tout ses méthodes/propriétés seront unique
    Doivent être static. Mais pas uniques : les règles de surcharges pour les méthodes statiques sont les mêmes.

    Au niveau d'une propriété/méthode/champs celui-ci sera commun alors à toute les classes
    Ce n'est pas exact. Une classe static privée interne à une autre classe, donc avec une visibilité limitée à cette dernière, est parfaitement licite.

  7. #7
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 180
    Points : 4 496
    Points
    4 496
    Par défaut
    Citation Envoyé par Bluedeep Voir le message
    Dans le cas d'une classe, en général oui, mais pas obligatoirement. Dans le cas une méthode ou d'un membre, pas forcément non plus : une méthode ou un membre "private static" est courant.
    Dans le cas d'une méthode celle-ci est "globale" à la classe
    Dans le cas d'un field, celui-ci est "globale" pour la classe (partagé par toutes ses instances)

    Citation Envoyé par Bluedeep Voir le message

    Doivent être static. Mais pas uniques : les règles de surcharges pour les méthodes statiques sont les mêmes.
    Oui mal exprimé et je pensais fields surtout au fields qui est (unique) partagé par toutes les instances.
    C'est bien de VB Shared c'est plus compréhensible que static :p

    Citation Envoyé par Bluedeep Voir le message
    Ce n'est pas exact. Une classe static privée interne à une autre classe, donc avec une visibilité limitée à cette dernière, est parfaitement licite.
    Ah oui quand même
    C'est une question que tu poses aux interviews? :p

    Déja définir des classes internes, ca m'arrive rarement mais alors une classe interne static

  8. #8
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Citation Envoyé par BenoitM Voir le message
    C'est une question que tu poses aux interviews? :p
    Non. Sur les "static", j'en ai une plus vicieuse sur l'ordre d'appel des constructeurs static en héritage.
    Et tu serais surpris du nombre de "pas débutants" qui se laissent prendre.(alors qu'il suffit presque de retenir "de bas en haut en instance, de haut en bas en statique" ... sauf en cas d'appel de méthodes statiques préalable à l'instanciation ).

    Déja définir des classes internes, ca m'arrive rarement mais alors une classe interne static
    Je suis d'accord avec le fait que private static ce n'est pas très courant.
    En revanche, les classes interne d'instance, c'est très fréquent : c'est le mode standard pour passer des paramètres multiples à une méthode d'entrée de thread.
    Un usage pour les private static peut par exemple la définition d'un contexte de nombreuses constantes multi-types, internes à une classe.

  9. #9
    Membre actif Avatar de tssi555
    Analyse système
    Inscrit en
    Juillet 2008
    Messages
    594
    Détails du profil
    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Juillet 2008
    Messages : 594
    Points : 295
    Points
    295
    Par défaut
    Merci pour vos réponses, mais je ne parviens pas à ce que je veux.

    Concrètement :

    - Comment pourrais-je accéder à une zone de texte partout dans mon projet :
    j'ai procédé ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     public static string MonText
            {
                get { return MonText.Text; }
            }
    Mais à partir ne n'importe quel point du projet, VS n'auto-complète rien quand je tape "FtpSer" par exemple.

    - Je reviens aux variables globales, j'aimerais déclarer une variable et y accéder partout dans mon projet. un exemple serait le bienvenue.


    Merci.

  10. #10
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Citation Envoyé par tssi555 Voir le message
    Merci pour vos réponse, mais j'ai du mal à aboutir à ce que je veux.

    Concrètement :

    - Comment pourrais-je accèder à une zone de texte partout dans mon projet :
    j'ai procédé ainsi :
    Une "zone de text globale", cela n'a aucun sens puisqu'elle "appartient" par définition à une instance de form. Donc, sans connaitre l'instance de la form en question, cela n'est pas possible.

    VB.Net avait, de manière totalement aberrante, continué à émuler une des bizzareries de VB6, en créant une instance de form pour toute form définie, même non instanciée dans le programme : malheureusement, certains dev ont pris l'habitude d'utiliser cette absurdité.

  11. #11
    Membre actif Avatar de tssi555
    Analyse système
    Inscrit en
    Juillet 2008
    Messages
    594
    Détails du profil
    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Juillet 2008
    Messages : 594
    Points : 295
    Points
    295
    Par défaut
    Merci François.
    Je sais bien que je traine encore des habitudes de Visual Basic...

    Comment pourrais-je faire donc? quelle est la manière la plus appropriée en C#?

Discussions similaires

  1. acces aux ressources par une variable?
    Par lowfee dans le forum VB.NET
    Réponses: 17
    Dernier message: 09/11/2010, 19h47
  2. Réponses: 3
    Dernier message: 02/01/2009, 00h28
  3. Acces aux control d'une form depuis une classe
    Par PhilCou dans le forum Windows Forms
    Réponses: 2
    Dernier message: 22/07/2008, 09h59
  4. [VB.net] Acces aux controles d'une form a partir d'une autre
    Par Fab62_ dans le forum Windows Forms
    Réponses: 3
    Dernier message: 25/01/2006, 12h47

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