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 :

inaccessible due to its protection level [Débutant]


Sujet :

Windows Forms

  1. #1
    Membre du Club
    Inscrit en
    Août 2009
    Messages
    273
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 273
    Points : 46
    Points
    46
    Par défaut inaccessible due to its protection level
    Bonjour,

    J'ai une fenêtre nommée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public partial class AdvancedSearchForm : Form
    qui contient un textbox que j'aimerai pouvoir manipuler depuis une autre fenêtre appelée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public partial class SearchContactForm : Form
    Pour cela, je crée une instance de la fenêtre où se trouve le textbox c'est à dire AdvancedSearchForm dans SearchContactForm comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    AdvancedSearchForm frmAS = new AdvancedSearchForm();
                        frmAS.textBoxFirstName.Text = sFName;
    Lorsque je compile, j'obtiens l'erreur suivante :
    'AdvancedSearchForm.textBoxFirstName' is inaccessible due to its protection level C:\..\SearchContactForm.cs

  2. #2
    Invité
    Invité(e)
    Par défaut
    Normal vu que tout élément créé dans un formulaire est marqué comme protected. La meilleure façon c'est de créer une propriété qui se chargera d'assigner/renvoyer la propriété Text de ton élément comme suit dans AdvancedSearchForm :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public ASText
    {
        get { return this.textBoxFirstName.Text; }
        set { this.textBoxFirstName.Text = value; }
    }

    puis tu l'utilises comme suit :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    AdvancedSearchForm frmAS = new AdvancedSearchForm();
    frmAS.ASText= sFName;

  3. #3
    Membre du Club
    Inscrit en
    Août 2009
    Messages
    273
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 273
    Points : 46
    Points
    46
    Par défaut
    Merci beaucoup d'avoir pris de votre temps pour me répondre. J'ai bien compris votre solution. Cependant, je voudrais savoir s'il existe une autre solution car j'ai suivi ce tuto et je ne vois pas comment ça pu fonctionner autrement.

    Est-il possible que la valeur du modificateur ait été changée dans les propriétés du textbox?

    Merci,

  4. #4
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2010
    Messages
    479
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

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

    Informations forums :
    Inscription : Août 2010
    Messages : 479
    Points : 762
    Points
    762
    Par défaut
    Salut,
    ce code trouvé dans ton tuto peut fonctionner si la portée de la textbox est définie publique et non privée dans le Designer.cs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private TextBox textBoxFirstName = new TextBox();
    devient

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public TextBox textBoxFirstName = new TextBox();
    Là tu pourra modifier les propriétés de ta textbox depuis une autre classe.
    Petite explication sur http://rmdiscala.developpez.com/cour...s2/Chap2.1.htm

    Cela dit la solution de h2s84 est plus maintenable et ne donne accès aux autre classe qu'à la propriété voulue. En fait ça dépend vraiment de ce que ut veux faire avec la tb.

    A+

  5. #5
    Membre du Club
    Inscrit en
    Août 2009
    Messages
    273
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 273
    Points : 46
    Points
    46
    Par défaut
    Donc on peut en déduire que dans le tuto la portée de la textbox est définie à publique et que la meilleure solution c'est de la définir à privée et utiliser la solution de M. h2s84 soit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public ASText
    {
        get { return this.textBoxFirstName.Text; }
        set { this.textBoxFirstName.Text = value; }
    }
    ?

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Jinkas Voir le message
    Donc on peut en déduire que dans le tuto la portée de la textbox est définie à publique et que la meilleure solution c'est de la définir à privée et utiliser la solution de M. h2s84 ...
    Ce tuto (je ne sais pas pourquoi j'arrive pas à voir le contenu. J'ai un 404) ne respecte pas la bonne pratique. Tout ce qui se trouve dans le fichier Designer.cs ne doit pas être modifié parce que tout simplement c'est du code généré par le Designer qui s'y trouve. La solution que je t'ai proposé est plus simple : tu exposes à l'extérieur uniquement ce dont ils ont besoin

  7. #7
    Membre du Club
    Inscrit en
    Août 2009
    Messages
    273
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 273
    Points : 46
    Points
    46

  8. #8
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2010
    Messages
    479
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

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

    Informations forums :
    Inscription : Août 2010
    Messages : 479
    Points : 762
    Points
    762
    Par défaut
    Tout ce qui se trouve dans le fichier Designer.cs ne doit pas être modifié parce que tout simplement c'est du code généré par le Designer qui s'y trouve
    Pour le coup c'est le designer qui a généré ce code car tu as accès à la propriété "Modifier" via l'éditeur graphique.

    Mais je suis d'accord c'est "sale" et dangereux.

    Toujours donner l'accès au minimum = moins de risque. Se vérifie en multi-thread

  9. #9
    Membre du Club
    Inscrit en
    Août 2009
    Messages
    273
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 273
    Points : 46
    Points
    46
    Par défaut
    Merci beaucoup à tous.

  10. #10
    Membre du Club
    Inscrit en
    Août 2009
    Messages
    273
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 273
    Points : 46
    Points
    46
    Par défaut
    Bonjour,

    j'ai essayé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public ASText
    {
        get { return this.textBoxFirstName.Text; }
        set { this.textBoxFirstName.Text = value; }
    }
    mais ça n'a pas fonctionné.

    J'ai rajouté string comme ceci et ça a fonctionné:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
            public AdvancedSearchForm ()
            {
                InitializeComponent();
            }
     
            public string ASText
            {
               get { return this.textBoxFirstName.Text; }
        set { this.textBoxFirstName.Text = value; }
            }

  11. #11
    Invité
    Invité(e)
    Par défaut
    Effectivement c'est un oubli. Une propriété sans type spécifié n'a pas de sens.

    Pense à mettre en cliquant sur le bouton prévu pour cela en bas de la discussion.

  12. #12
    Membre du Club
    Inscrit en
    Août 2009
    Messages
    273
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 273
    Points : 46
    Points
    46
    Par défaut
    Merci,

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 13/09/2013, 16h36
  2. Réponses: 0
    Dernier message: 13/09/2013, 12h34
  3. Réponses: 3
    Dernier message: 05/03/2012, 10h10
  4. SSIS protection level
    Par jfantou dans le forum SSIS
    Réponses: 1
    Dernier message: 20/04/2010, 11h19
  5. Probleme due a la protection Windows?
    Par Kassar dans le forum Langage
    Réponses: 5
    Dernier message: 04/01/2010, 17h31

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