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 :

[C# 2.0] Modifier les propriétés par défaut du designer d'un composant


Sujet :

Windows Forms

  1. #1
    Nouveau membre du Club
    Inscrit en
    Novembre 2005
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 40
    Points : 26
    Points
    26
    Par défaut [C# 2.0] Modifier les propriétés par défaut du designer d'un composant
    Bonjour,

    Je cherche une méthode pour réinitialiser les valeurs par défaut du designer d'un composant winform datagridView. Par exemple : que la propriété readOnly soit par defaut a true et non false , Multiselect à false et non true...

    Ce composant étant réutilisé dans d'autres projets, les utilisateurs doivent pouvoir resetter ces valeurs comme bon leur semble à travers le designer.

    Ceci exclu l'initialisation de ces valeurs dans le constructeur du composant car dans ce cas le designer n'arrive pas a écraser les valeurs définies.

    Quelqu'un peut il me donner une piste ?

  2. #2
    Membre à l'essai
    Inscrit en
    Juillet 2006
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 26
    Points : 20
    Points
    20
    Par défaut
    Conseil fait toi un controle perso à partir du composant chosi

    Citation Envoyé par 2020 Voir le message
    Bonjour,

    Je cherche une méthode pour réinitialiser les valeurs par défaut du designer d'un composant winform datagridView. Par exemple : que la propriété readOnly soit par defaut a true et non false , Multiselect à false et non true...

    Ce composant étant réutilisé dans d'autres projets, les utilisateurs doivent pouvoir resetter ces valeurs comme bon leur semble à travers le designer.

    Ceci exclu l'initialisation de ces valeurs dans le constructeur du composant car dans ce cas le designer n'arrive pas a écraser les valeurs définies.

    Quelqu'un peut il me donner une piste ?

  3. #3
    Nouveau membre du Club
    Inscrit en
    Novembre 2005
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 40
    Points : 26
    Points
    26
    Par défaut
    C'est ce qui est fait.

    En fait j'ai créé un composant perso qui dérive de DataGridView.

    Mais le problème reste le même.

    En fait "l'idéal" aurrait été de pouvoir faire un override de ma propriété ReadOnly que j'aurrai initilialiser par le tag DefaultValue.

    Mais voila, il n'est pas possible de faire un override de ReadOnly....

  4. #4
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    dans le new de ton controle hérité, après le mybase.new, tu peux surement mettre la valeur que tu veux
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Nouveau membre du Club
    Inscrit en
    Novembre 2005
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 40
    Points : 26
    Points
    26
    Par défaut
    Si je te suis bien tu en VB.NET : New = constructeur

    Oui je peux l'initialiser dans le constructeur.

    Mais dans ce cas lorsque je livre mon composant et qu'il est utilisé dans un projet et déposé dans une form (ou autre), lorsque l'utilisateur change la valeur du paramètre à l'aide du designer celle n'est jamais prise en compte. La valeur de la propriété est toujours écrasé par la valeur définie dans le constructeur.

    Seul moyen de la changer c'est dans le onload de la form après avoir créé mon composant redéfinir la valeur par codage. Or il y a bcp de propriété a setter et bcp de form et de plus ce n'est pas intuitif pour les développeurs qui utilisent mon composant.

  6. #6
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    (oui désolé moi je fais du vb)

    enfin le constructeur est appelé avant que les valeurs du designer soit settée
    donc pas de problème, l'utilisateur du composant aura toujours le choix

    regarde un fichier designer sinon, ca fait new de l'objet puis parametrage puis form.controls.Add()
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  7. #7
    Nouveau membre du Club
    Inscrit en
    Novembre 2005
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 40
    Points : 26
    Points
    26
    Par défaut
    C pourtant ce que je fais mais bizarrement le designer n'arrive a pas setter les valeurs....

    C'est peut être un bug mon visual studio...

    D'ailleurs tu as raison si je modifie a la mano le desinger de ma form il prend bien en compte la valeur par contre si je passe par l'interface de gestion des propriété de VS, il n'effectue pas la modification dans le fichier designer de la form.

  8. #8
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    sinon il doit y avoir un attribut defaultvalue à mettre devant la propriété overridée
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  9. #9
    Nouveau membre du Club
    Inscrit en
    Novembre 2005
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 40
    Points : 26
    Points
    26
    Par défaut
    Yes j'y ai pensé car j'ai créé mes propres propriétés et j'ai utilisé les tags defaultvalue pour celles-ci.
    mais je peux pas overrider la propriété readonly, rowheadervisible ....

    J'ai aussi essayé d'écraser la propriété avec une nouvelle portant le même nom et faisant appel à base.Readonly mais dans ce cas la valeur retournée est tjrs celle définie dans le constructeur.

  10. #10
    Nouveau membre du Club
    Inscrit en
    Novembre 2005
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 40
    Points : 26
    Points
    26
    Par défaut
    ca y est je comprend le principe du designer :

    En fait lorsque la valeur d'un champs est setter a sa valeur par defaut le designer de VS supprime la ligne initilisant la propriété dans le fichier designer de ma form.

    prenons l'exemple de la propriété RowsHeaderVisible : valeur par défaut true.

    Si je change par l'interface du designer true -> false il rajoute une ligne initialisant la propriété a false mais si je la passe a true il supprime la ligne or cette propriété étant initialisé a false dans le constructeur de mon composant a false ... celle-ci sera tjrs égale à false....

    donc il faut trouver un moyen pour changer la valeur par defaut.

  11. #11
    Nouveau membre du Club
    Inscrit en
    Novembre 2005
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 40
    Points : 26
    Points
    26
    Par défaut
    Citation Envoyé par 2020 Voir le message
    J'ai aussi essayé d'écraser la propriété avec une nouvelle portant le même nom et faisant appel à base.Readonly mais dans ce cas la valeur retournée est tjrs celle définie dans le constructeur.
    mmm Après un nouvel essai il semble que cela fonctionne :

    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
      [DefaultValue(false)]
         public bool RowHeadersVisible
         {
             get { return base.RowHeadersVisible; }
             set { base.RowHeadersVisible = value; }
         }
     
            #region Constructor
     
            /// <summary>
            /// Initializes a new instance of the <see cref="EBMSDataGridView"/> class.
            /// </summary>
            public MyDataGridView()
            {
                InitializeComponent();
                this.RowHeadersVisible = false;
    ....
    Surement un oubli de compiler lors d'une de mes tentatives ....

    Désolé et merci tout de même pour le coup de main qui m'a éviter de partir en live dans mes recherches.

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

Discussions similaires

  1. [2.3.2] Modifier les styles par défaut
    Par dodane dans le forum BIRT
    Réponses: 7
    Dernier message: 28/04/2009, 09h41
  2. Modifier les permissions par défaut
    Par zz2f3 dans le forum Administration système
    Réponses: 4
    Dernier message: 22/06/2008, 13h25
  3. Modifier les paramètres par défaut d'un port série
    Par aleister dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 06/03/2008, 17h12
  4. Réponses: 0
    Dernier message: 02/11/2007, 21h34
  5. Réponses: 9
    Dernier message: 13/06/2005, 17h56

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