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 :

[UserControl] accessibilité d'une propriété dans le designer


Sujet :

Windows Forms

  1. #1
    Membre habitué Avatar de obitskater
    Profil pro
    Développeur .NET
    Inscrit en
    Février 2008
    Messages
    163
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2008
    Messages : 163
    Points : 132
    Points
    132
    Par défaut [UserControl] accessibilité d'une propriété dans le designer
    Bonjour à tous,

    Voilà je suis en train de développer une bibliothéque de contrôles personnalisés pour mon appli, j'ai donc un TextBoxCustom qui hérite de TextBox, une ComboBoxCustom qui hérite de ComboBox, etc...

    Mais chaque contrôle custom à une propriété commune: le mode de saisie que je définis dans une structure:

    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
     
    public static class Enums
        {
    /// <summary>
            /// Enumération contenant la liste des modes de saisies des contrôles Custom
            /// </summary>
            public enum ControlCaptureMode
            {
                /// <summary>
                /// Saisie obligatoire
                /// </summary>
                Compulsory,
                /// <summary>
                /// Saisie facultative
                /// </summary>
                Optional,
                /// <summary>
                /// Saisie bloqué
                /// </summary>
                Locked,
            }
        }
    Suivant le mode de saisie choisi, la backColor du contrôle doit changer.

    Puisque c'est un comportement commun à tous mes contrôles custom, j'ai créé une classe dans laquelle seront traités les comportements communs, dont le mode d'affichage:

    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
     
    public class ControlCustom : Control
        {
            #region Members
     
            private Enums.ControlCaptureMode _captureMode;
     
            #endregion
     
     
            #region Properties
     
            public Enums.ControlCaptureMode CaptureMode
            {
                get
                {
                    return this._captureMode;
                }
                set
                {
                    this._captureMode = value;
                    SetCaptureMode();
                }
            }
     
            #endregion
     
     
            #region Methodes
     
            private void SetCaptureMode()
            {
                switch (_captureMode)
                {
                    case Enums.ControlCaptureMode.Compulsory:
                        this.BackColor = Color.PaleTurquoise;
                        this.Enabled = true;
                        break;
                    case Enums.ControlCaptureMode.Locked:
                        this.BackColor = Color.LemonChiffon;
                        this.Enabled = false;
                        break;
                    case Enums.ControlCaptureMode.Optional:
                    default:
                        this.BackColor = Color.White;
                        this.Enabled = true;
                        break;
                }
            }
     
            #endregion
        }
    Puis dans chacun des mes contrôles custom j'ai mis une propriété permettant de manipuler un objet de cette classe ControlCustom:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    [ToolboxBitmap(typeof(TextboxCustom), "favicon.ico")]
        public class TextboxCustom : TextBox
        {
     
            public ControlCustom ControlCustom { get; set; }
     
        }

    Le soucis est que je vois bien ma propriété ControlCustom dans le designer quand j'édite ma TextboxCustom, mais je souhaiterai avoir accés aux valeurs de l'énumération directement dans le designer depuis cet attribut ControlCustom (un peu de la même manière que padding par exemple pour une form avec un petit + qui déroule les autres attributs), alors que tout ce que j'ai pour le moment c'est un (none)...

    Si vous auriez une idée de comment faire ce serait super, Merci!

  2. #2
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    [ToolboxBitmap(typeof(TextboxCustom), "favicon.ico")]
        public class TextboxCustom : TextBox
        {
            public ControlCaptureMode CaptureMode
            {
                 get {return ControlCustom.CaptureMode;}
                 set {ControlCustom.CaptureMode = value;}
            }
     
            [Browsable(false)]
            protected ControlCustom ControlCustom { get; set; }
     
        }

  3. #3
    Membre habitué Avatar de obitskater
    Profil pro
    Développeur .NET
    Inscrit en
    Février 2008
    Messages
    163
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2008
    Messages : 163
    Points : 132
    Points
    132
    Par défaut
    Niquel merci

    Il manquait juste à instancier ControlCustom car j'avais dans le designer un joli message indiquant qu'il ne l'était pas

  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
    si le but de tes controles dérivés et de rajouter la meme propriété à tous,
    tu aurais pu le faire en 10 lignes à un endroit et continuer à utiliser les controles de bases
    et ce avec les extendproperties
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

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

Discussions similaires

  1. [MCD] Modéliser une propriété dans une relation
    Par korrigan dans le forum PowerAMC
    Réponses: 4
    Dernier message: 04/09/2007, 15h33
  2. Utilisation d'une propriété dans une table
    Par pcayman dans le forum Modélisation
    Réponses: 1
    Dernier message: 12/05/2007, 18h42
  3. Réponses: 6
    Dernier message: 30/11/2006, 18h15
  4. Réponses: 2
    Dernier message: 23/11/2006, 21h23
  5. [c#][VS2003]Mise à jour propriété dans le designer
    Par cedkat dans le forum Windows Forms
    Réponses: 3
    Dernier message: 14/11/2005, 15h10

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