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#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé 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
    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
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 193
    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 : 50
    Localisation : Belgique

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

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    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 éclairé 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
    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
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 193
    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 : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    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
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 193
    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

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