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#]Bloquer une propriété du designer


Sujet :

Windows Forms

  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2008
    Messages : 612
    Points : 1 050
    Points
    1 050
    Par défaut [C#]Bloquer une propriété du designer
    Bonjour,

    Petite question qui a probablement une réponse simple.

    Je dérive un control Label, mais je veux que la propriété Text soit "" par défaut.

    Or, le designer ajoute ceci automatiquement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    this.bgLed1.Name = "bgLed1";
    this.bgLed1.Text = "bgLed1";
    Résultat, je me retrouve avec une propriété Text qui est égale au nom du contrôle par défaut, au lieu d'un texte vide.

    J'ai trouvé comme unique solution de détecter dans ma propriété "Text" : si valeur = nom du contrôle, remplacer par "", ce qui rend inopérationnel la ligne en question du designer :

    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
     
            [Browsable(true)]                                   // apparaît en mode designer
            [Description("Texte contenu dans la Led")]          // info pour l'éditeur
            [DefaultValue("")]                                  // valeur par défaut
            public override string Text
            {
                get { return base.Text; }                       // retourne le texte de la led
                set 
                {
                    string val = value;
                    if (value == base.Name)                     // Neutralise la ligne du designer
                        val = "";
     
                    if (val == string.Empty)                    // si on demande un texte null
                        base.AutoSize = false;                  // annuler l'autosize
                    base.Text = val;                            // affecter le nouveau texte
                }
            }
    Mais bon, ce n'est pas du tout élégant.
    Je souhaiterai savoir comment bloquer l'ajout de la ligne par le designer, et surtout savoir où il va chercher l'info qu'il doit ajouter cette ligne (pour éventuellement pouvoir forcer le designer à ajouter d'autres lignes spécifiques).

    Ou, dit autrement, qu'est-ce qui force le designer à écrire ces lignes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
                // 
                // bgLed1
                // 
                this.bgLed1.BorderStyle = System.Windows.Forms.BorderStyle.None;
                this.bgLed1.Duration = 0;
                this.bgLed1.Location = new System.Drawing.Point(78, 40);
                this.bgLed1.Name = "bgLed1";
                this.bgLed1.Size = new System.Drawing.Size(100, 23);
                this.bgLed1.TabIndex = 0;
                this.bgLed1.Text = "bgLed1";
    Merci d'avance
    Claude

  2. #2
    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
    c'est vrai qu'on pourrait penser que c'est simple, mais la manière la plus propre de le faire est la suivante


    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
     
    [System.ComponentModel.Designer(typeof(DesignerDeMonLabel))]
    public class monlabel : Label
    {
    }
     
    public class DesignerDeMonLabel : System.Windows.Forms.Design.ControlDesigner
    {
        public override void InitializeNewComponent(System.Collections.IDictionary defaultValues)
        {
            base.InitializeNewComponent(defaultValues);
            System.ComponentModel.TypeDescriptor.GetProperties(Component)("Text").SetValue(Component, "");
        }
     
    }
    et ca ne s'invente pas ^^
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2008
    Messages : 612
    Points : 1 050
    Points
    1 050
    Par défaut
    Salut
    -----

    Merci 1000 fois, ça fonctionne parfaitement.

    Juste un détail pour celui qui ferait un copié/collé, autours de "Text" il faut des crochets [] et pas des parenthèses ().

    Encore merci

    Claude

  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
    Citation Envoyé par ClaudeBg Voir le message
    Juste un détail pour celui qui ferait un copié/collé, autours de "Text" il faut des crochets [] et pas des parenthèses ().
    tu fais bien de le préciser (les convertisseurs vb.net/c# sont pas super fiables ...)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 06/02/2013, 14h48
  2. [UserControl] accessibilité d'une propriété dans le designer
    Par obitskater dans le forum Windows Forms
    Réponses: 3
    Dernier message: 07/04/2009, 19h52
  3. Réponses: 2
    Dernier message: 18/10/2003, 14h42
  4. Récupération valeur d'une propriété type TStrings
    Par Stéphane Vaillant dans le forum Langage
    Réponses: 2
    Dernier message: 01/03/2003, 11h47
  5. [ActiveX] Visibilité d'une propriété
    Par paradise dans le forum Composants VCL
    Réponses: 2
    Dernier message: 14/11/2002, 18h33

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