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

VB.NET Discussion :

Définir une valeur par défaut d'une propriété [Débutant]


Sujet :

VB.NET

  1. #1
    Membre éclairé
    Homme Profil pro
    Technicien bio médical
    Inscrit en
    Décembre 2012
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien bio médical
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2012
    Messages : 328
    Points : 768
    Points
    768
    Par défaut Définir une valeur par défaut d'une propriété
    Bonsoir,

    Je souhaiterais savoir comment on peut définir une valeur par défaut dans une propriété d'une classe.

    Admettons que je veuille que la valeur par défaut de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Private _Color As Color
        Public Property BackColor() As Color
            Get
                Return _Color
            End Get
            Set(ByVal value As Color)
                _Color = value
            End Set
    End Property
    soit rouge

    Autre question, dans le cas d'un CustomControl, comment faire pour faire apparaître nos propriétés personnalisées dans une catégorie précise de la grille de propriétés?

    Merci d'avance pour vos réponses.
    est ton amis, MSDN est ton maître, pour le reste il y a Developpez.net. Pensez au au et

  2. #2
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    Comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
        Private _Backcolor As Color = Color.BlueViolet
        <Category("Appearance"), Description("La couleur de fonds")> _
        Public Overridable Property Backcolor() As Color
            Get
                Return _Backcolor 
            End Get
            Set(ByVal value As Color)
                _Backcolor = value
            End Set
        End Property

  3. #3
    Membre éclairé
    Homme Profil pro
    Technicien bio médical
    Inscrit en
    Décembre 2012
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien bio médical
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2012
    Messages : 328
    Points : 768
    Points
    768
    Par défaut
    J'ai manqué une occasion de me taire pour la valeur par défaut


    Merci Wallace1.
    est ton amis, MSDN est ton maître, pour le reste il y a Developpez.net. Pensez au au et

  4. #4
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    Citation Envoyé par Rainui Voir le message
    J'ai manqué une occasion de me taire pour la valeur par défaut


    Merci Wallace1.
    ^^ Bien souvent quand on a la tête dans le guidon on ne voit pas ce qui saute aux yeux....

  5. #5
    Membre éclairé
    Homme Profil pro
    Technicien bio médical
    Inscrit en
    Décembre 2012
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien bio médical
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2012
    Messages : 328
    Points : 768
    Points
    768
    Par défaut
    J'avoue que je commence à saturer...

    3 semaines que je suis sur le dev d'un TabControl en wpf...
    Faut pas être pressé
    est ton amis, MSDN est ton maître, pour le reste il y a Developpez.net. Pensez au au et

  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
    Citation Envoyé par Rainui Voir le message
    J'ai manqué une occasion de me taire pour la valeur par défaut
    oui et non

    il y a une dernière subtilité, System.ComponentModel.DefaultValue, qui permet de spécifier la valeur par défaut pour le designer
    quand on pose un control dans visual studio, pour chaque propriété ayant une valeur différente de celle défini dans cet attribut, vs créé une ligne de code pour lui mettre la valeur
    ca permet donc d'éviter quelques lignes de code à exécuter dans certains cas

    avec un exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    private _couleur as color = color.blue
    <defaultvalue(color.blue)> 
    property couleur (...)
    si on pose un controle en laissant bleu, aucune ligne de code généré
    si on change la couleur pour rouge vs enregistre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lecontrol.couleur = color.red
    sans l'attribut, même pour bleu il y aura la ligne de code, car il ne sait pas que tu as mis bleu par défaut dans ton code
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  7. #7
    Membre chevronné
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Points : 2 209
    Points
    2 209
    Par défaut
    Juste pour ajouter une (autre*) précision (*outre la remarque de Pol63 encore trop rapide ),
    Comme dans ce cas il n'y a aucun traitement particulier dans le getter/setter, on peut utiliser une Auto-implemented Property et directement lui affecter une valeur par défaut comme ceci:

    Public Overridable Property BackColor As Color = Color.Red

    Cordialement !
    Nous sommes tous plus ou moins geek : ce qui est inutile nous est parfaitement indispensable ( © Celira )
    À quelle heure dormez-vous ?
    Censément, quelqu'un de sensé est censé s'exprimer sensément.

  8. #8
    Membre éclairé
    Homme Profil pro
    Technicien bio médical
    Inscrit en
    Décembre 2012
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien bio médical
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2012
    Messages : 328
    Points : 768
    Points
    768
    Par défaut
    Merci Pol63 pour cette précision.

    Si j'ai bien compris, ça évite de surcharger le code créé par le designer quand une personne dépose le contrôle.

    En tout cas, mon TabControl vous remercie grandement et moi aussi
    est ton amis, MSDN est ton maître, pour le reste il y a Developpez.net. Pensez au au et

  9. #9
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    Merci Pol63 et Sehnsucht pour ces précisions, je ne suis malheureusement qu'un modeste administrateur système et réseau qui ne cesse de parfaire mes minimes compétences dans ce domaine qui me passionne. Alors quand l'échange se veut constructif, je prends note.

    Cordialement.

  10. #10
    Membre éclairé
    Homme Profil pro
    Technicien bio médical
    Inscrit en
    Décembre 2012
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien bio médical
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2012
    Messages : 328
    Points : 768
    Points
    768
    Par défaut
    Je viens de tester 2 choses :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <DefaultValue(Colors.Red)>
    me donne un message d'erreur disant: "Une expression constante est requise." Message que je ne comprends pas vraiment puisque Colors.Red est une couleur système fixe (enfin je crois)

    Color.Red : Red n'est pas un membre de Color donc ça normal que ça ne fonctionne pas.

    Par contre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public Overridable Property BackColor As Color = Color.Red
    fonctionne sans soucis sauf que si j'ai bien compris ce que Pol63 a dit quand l'utilisateur pose le contrôle sur le designer, celui ci créé une ligne de code pour attribuer la couleur à la propriété.

    Je remet le post en non résolu, je vois que ça interresse du monde
    est ton amis, MSDN est ton maître, pour le reste il y a Developpez.net. Pensez au au et

  11. #11
    Membre chevronné
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Points : 2 209
    Points
    2 209
    Par défaut
    Non mais il faut combiner cela avec ce qu'a dit Pol63 (pour ça que j'avais écrit "outre sa remarque")
    J'ai juste écrit le strict minimum dans mon exemple de code (flemme power )
    rien ne t'empêche de faire ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <DefaultValue(Color.Red)>
    Public Overridable Property BackColor As Color = Color.Red
    Ainsi si l'utilisateur du composant ne change pas la couleur aucune ligne supplémentaire ne sera générée mais si on la change il en ajoutera.

    Cordialement !
    Nous sommes tous plus ou moins geek : ce qui est inutile nous est parfaitement indispensable ( © Celira )
    À quelle heure dormez-vous ?
    Censément, quelqu'un de sensé est censé s'exprimer sensément.

  12. #12
    Membre éclairé
    Homme Profil pro
    Technicien bio médical
    Inscrit en
    Décembre 2012
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien bio médical
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2012
    Messages : 328
    Points : 768
    Points
    768
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cerveau.Mode=Cerveau.Modes.Pause


    Je n'ai pas grands chose à ajouter à cela

    Effectivement, je peux combiner les deux.

    Il ne reste que l'erreur que je ne comprends pas.
    En regardant les surcharges de <DefaultValue()>, il n'y a pas le type Color.

    J'avoue que c'est peut être du chipotage pour pas grand chose mais j'aime bien comprendre
    est ton amis, MSDN est ton maître, pour le reste il y a Developpez.net. Pensez au au et

  13. #13
    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 Rainui Voir le message
    Si j'ai bien compris, ça évite de surcharger le code créé par le designer quand une personne dépose le contrôle.
    Il y a en effet cet effet là, si tu mets Red dans la propriété (exécuté pendant le New de la classe) ca ne sert à rien que se réexécute la ligne généré pour mettre Red (InitializeComponent)
    c'est des pouillèmes par contre dans ce cas
    Il y a un autre effet
    Si demain tu mets Blue à la place de Red dans la variable et dans l'attribut DefaultProperty tous les controles ayant laissé la valeur par défaut passeront en bleu à la prochaine exécution, alors que sans l'attribut les designer ont enregistré red et ne prendront donc pas la nouvelle valeur par défaut

    Citation Envoyé par Rainui Voir le message
    JMessage que je ne comprends pas vraiment puisque Color.Red est une couleur système fixe
    Red est une propriété shared sur la classe Color
    une propriété toute shared qu'elle est peut varier dans le temps (enfin pas dans ce cas mais dans le principe), et le compilateur veut une constante pour cet attribut, donc pas un truc qui peut varier ^^
    là tout de suite je ne vois pas de solution de contournement ... si ce n'est se dire c'est pas grave ca me dérange pas que le designer enregistre ca

    Citation Envoyé par Rainui Voir le message
    En regardant les surcharges de <DefaultValue()>, il n'y a pas le type Color.
    ils n'allaient pas faire une surcharge pour les millions de types du framework non plus celle As Object prend le relais pour le reste
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  14. #14
    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 wallace1 Voir le message
    Merci Pol63 et Sehnsucht pour ces précisions, je ne suis malheureusement qu'un modeste administrateur système et réseau qui ne cesse de parfaire mes minimes compétences dans ce domaine qui me passionne. Alors quand l'échange se veut constructif, je prends note.
    ta réponse était bonne quand même, je n'ai que chipoté pour rien vu que ca marche pas finalement ^^
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  15. #15
    Membre éclairé
    Homme Profil pro
    Technicien bio médical
    Inscrit en
    Décembre 2012
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien bio médical
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2012
    Messages : 328
    Points : 768
    Points
    768
    Par défaut
    Merci beaucoup à tout le monde pour toutes ces précisions qui me permettent d'avancer sur ce contrôle.

    Merci également pour les explications, je me coucherai moins bête (vu le bestio, c'est pas gagné ).
    est ton amis, MSDN est ton maître, pour le reste il y a Developpez.net. Pensez au au et

  16. #16
    Membre éclairé
    Homme Profil pro
    Technicien bio médical
    Inscrit en
    Décembre 2012
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien bio médical
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2012
    Messages : 328
    Points : 768
    Points
    768
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    ta réponse était bonne quand même, je n'ai que chipoté pour rien vu que ca marche pas finalement ^^
    Ca ne marche pas pour ça mais c'est toujours bon à savoir ^^
    est ton amis, MSDN est ton maître, pour le reste il y a Developpez.net. Pensez au au et

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 22/08/2010, 17h40
  2. Réponses: 6
    Dernier message: 17/05/2010, 21h26
  3. Réponses: 4
    Dernier message: 05/06/2007, 09h16
  4. Réponses: 2
    Dernier message: 15/03/2006, 09h44
  5. Réponses: 6
    Dernier message: 14/02/2006, 20h53

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