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 :

Heritage de bouton changer le text [Débutant]


Sujet :

C#

  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 044
    Points : 1 041
    Points
    1 041
    Par défaut Heritage de bouton changer le text
    Bonjour,
    Je crée pour la première fois un control hérité,
    je pensait que l'on pouvait modifier le texte directement dans la définition pour ne le définir qu'une fois, or il prend en compte le texte du bouton créé
    Pouvez vous m'indiquer ou est le problème?
    merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     public partial class CustomButtonDrag : Button
        {
    public CustomButtonDrag()
            {
               Text = "+";
                Height = 12;
                Width = 12;
                Top = 0;
                Left = 0;
     
            }
     
        }

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    En effet, c'est plus compliqué que ça d'hériter d'un contrôle, car quand tu l'utilises dans le designer, il obéit aussi à d'autres règles. Dans le designer, quand tu mets un composant, du code est automatiquement généré dans la partie "designer". Pour chaque propriété, le designer va se baser sur certains attributs pour savoir si cette propriété doit changer ou pas.
    Je vais te montrer tout ça dans un exemple juste après.

    Ce que tu as fais dans ton constructeur est effectivement nécessaire mais pas suffisant.

    Il te faut en plus faire soit des "overrides" des propriétés concernées, et lorsque les propriétés ne sont pas virtuelles, il faut les redéfinir avec un new.

    Exemple avec la propriété "Text" qui est virtual :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    [DefaultValue("+")]
    public override string Text
    {
    	get { return base.Text; }
    	set { base.Text = value; }
    }
    Ici, "DefaultValue" va signaler au designer que si la valeur de Text vaut "+", alors il n'est pas nécessaire de généré du code, sinon du code sera généré.
    On peut aussi dire au designer de ne jamais générer du code pour cette propriété avec l'attribut :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)
    Autre exemple avec la propriété "Height". Celle-ci n'est pas virtuelle. Alors on va procéder ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    [DefaultValue(12)]
    public new int Height
    {
    	get { return base.Height; }
    	set { base.Height = value; }
    }
    En laissant aussi le 12 que tu as mis dans le constructeur, bien sûr.

    Tous ces attributs dont je parle sont dans le namespace "System.ComponentModel" de l'assembly "System.dll".

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 044
    Points : 1 041
    Points
    1 041
    Par défaut
    Bonjour et merci mais en tapant ce code qui doit etre faux cela ne fonctionne pas
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    public partial class CustomButtonDrag : RadButton
        {
     
            [DefaultValue("+")]
            public override string Text
            {
                get 
                { 
                    return base.Text; 
                }
                set 
                { 
                    base.Text = value; 
                }
            }
     
            [DefaultValue(12)]
            public new int Height
            {
                get { return base.Height; }
                set { base.Height = value; }
            }
            [DefaultValue(12)]
            public new int Width
            {
                get { return base.Width; }
                set { base.Width = value; }
            }
            public CustomButtonDrag()
            {
                InitializeComponent();
                Text = "+";
                this.DraggableParent(true);        
            }
     
        }

  4. #4
    Membre chevronné
    Avatar de PixelJuice
    Homme Profil pro
    Ingénieur .NET & Game Designer
    Inscrit en
    Janvier 2014
    Messages
    640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur .NET & Game Designer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2014
    Messages : 640
    Points : 2 149
    Points
    2 149
    Par défaut
    Citation Envoyé par cbleas Voir le message
    Bonjour et merci mais en tapant ce code qui doit etre faux cela ne fonctionne pas
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    public partial class CustomButtonDrag : RadButton
        {
     
            [DefaultValue("+")]
            public override string Text
            {
                get 
                { 
                    return base.Text; 
                }
                set 
                { 
                    base.Text = value; 
                }
            }
     
            [DefaultValue(12)]
            public new int Height
            {
                get { return base.Height; }
                set { base.Height = value; }
            }
            [DefaultValue(12)]
            public new int Width
            {
                get { return base.Width; }
                set { base.Width = value; }
            }
            public CustomButtonDrag()
            {
                InitializeComponent();
                Text = "+";
                this.DraggableParent(true);        
            }
     
        }

    Ton code a changé entre temps , pourquoi il n'hérite plus de Button ? RadButton est un RadioButton ?
    InitializeComponent() est une méthode pour les Form pour initialiser tous ses contrôles , elle n'a rien a faire ici.

    Quand tu dis que ça ne fonctionne pas , qu'est ce qui se passe ? Un message d'erreur ?

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 044
    Points : 1 041
    Points
    1 041
    Par défaut
    j'ai refait en faisant au plus simple et il n'y a aucun défaut la seule chose est qu'il ne prend pas les paramètres
    j'ai l'impression qu'il n'y a aucune liaison entre les paramètres
    ainsi quand je regarde ce qu'il a dans this.text il indique"" alors que sur le concepteur quand je l'utilise il y a une valeur
    J'ai refait mon code en intégrant ce que tu m'as indiqué et remis un code avec un bouton
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
        public partial class CustomButtonResize : Button
        {
     
            [DefaultValue("+")]
            public override string Text
            {
                get
                {
                    return base.Text;
                }
                set
                {
                    base.Text = value;
                }
            }
     
            [DefaultValue(12)]
            public new int Height
            {
                get { return base.Height; }
                set { base.Height = value; }
            }
            [DefaultValue(12)]
            public new int Width
            {
                get { return base.Width; }
                set { base.Width = value; }
            }
            public CustomButtonResize()
            {
                Text = "+";
                Height=12;
    Left=12;
            }
     
        }

  6. #6
    Invité
    Invité(e)
    Par défaut
    cbleas,

    Dans ton dernier code, il y a déjà une incohérence : tu redéfinis la propriété "Width" pour qu'elle ait une valeur par défaut à 12 mais dans ton constructeur tu initialises la propriété "Left" à 12 alors que tu n'as pas redéfini cette propriété.

    Ensuite, dans le formulaire où ton bouton est utilisé, va dans le designer du formulaire, sélectionne ton bouton. Puis dans les propriétés du bouton trouve la propriété "Text". Si elle ne vaut pas sa valeur par défaut, alors fais clic droit sur la propriété et choisit l'option "réinitialiser". Cela va purger le code d'initialisation de la propriété dans le formulaire.

    En effet, si tu avais modifié ta classe "CustomButtonResize" après l'avoir inséré dans le formulaire, alors il faut que tu repasses dans ton formulaire.

    N'hésites pas à te documenter sur attributs que je t'ai mentionné.

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 044
    Points : 1 041
    Points
    1 041
    Par défaut
    merci cela fonctionne bonne journée

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

Discussions similaires

  1. Changer le texte de l'occurence d'un bouton
    Par MistyMan dans le forum ActionScript 3
    Réponses: 4
    Dernier message: 11/05/2010, 01h55
  2. Changer le texte d'un bouton
    Par doommick31 dans le forum MFC
    Réponses: 2
    Dernier message: 03/08/2007, 10h31
  3. Changer le texte d'un bouton que j'ai créé
    Par kurvanov dans le forum Flash
    Réponses: 2
    Dernier message: 21/03/2007, 22h29
  4. changer le text du bouton sur 1 activex
    Par ali.tn dans le forum Visual C++
    Réponses: 1
    Dernier message: 16/02/2007, 17h01
  5. [Débutant] Changer le texte d'un bouton au click
    Par Zolstead dans le forum Windows Forms
    Réponses: 3
    Dernier message: 31/01/2007, 14h31

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