Bonjour,

Je suis en train de refaire les composants de bases (Label, TextBox etc...) pour un framework.

J'ai redéfini la classe Control :

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
 
public abstract class CCtrl : System.Windows.Forms.Control
    {
       //... avec des attributs, accesseurs et constructeurs qui va bien
 
       private string mTexte;
 
       public virtual string Texte
            {
                get { return mTexte; }
                set { mTexte = value; }
            }
 
       public CCtrl() : base()
            {
              ... un beau constructeur
            }
    }
et puis j'ai redefini mon Label :

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
 
public class CLabel : ControlLibrary1.Ctrl.CCtrl
    {
        #region "Attributs"
            public System.Windows.Forms.Label mLabel = new Label();
        #endregion
 
        //surcharge de l'accesseur
        public override string Texte
            {
                get { return mLabel.Text; }
                set { mLabel.Text = value; }
            }
 
        public CLabel()
                : base()
            {
              // Constructeur de ma classe de parente
            }
    }
Quand j'ajoute à mon formulaire mon composant "CLabel", la valeur texte n'est affichée QUE si je surcharge la méthode OnPaint() de la classe CCtrl :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
protected override void OnPaint(System.Windows.Forms.PaintEventArgs e)
{
   base.OnPaint(e);
   System.Drawing.SolidBrush BlackBrush = new System.Drawing.SolidBrush
(System.Drawing.Color.Black);
   e.Graphics.DrawString(this.Texte, this.Font, BlackBrush, this.Location.X,
 this.Location.Y); 
            }
Je ne comprend pas pourquoi le texte du label n'est pas affiché sans faire ca???