Bonjour,
Je comprends mal un phénomène qui se passe lorsque je dérive un contrôle à partir du TextBox.
Pour faire simple, j'ai surchargé ma propriété "BackColor", ce qui me permet, outre les nouvelles possibilités de mon contrôle, de disposer de 2 couleurs distinctes, une lorsque le controle est en mode lecture/écriture, et l'autre lorsque le contrôle est en ReadOnly (j'ai donc une seconde propriété BackReadOnlyColor).
Tout fonctionne en fait parfaitement si j'opère comme ceci :
En effet, comme ceci, lorsque je me place en mode design, j'ajoute mon contrôle sur la form, pas de problème. Je change la couleur de fond, toujours pas de problème, ça fonctionne comme un TextBox ordinaire.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 [Browsable(true)] [Description("Obtient ou définit la couleur de fond en mode lecture/écriture")] [DefaultValue(typeof(SystemColors),"Window")] [Category("BgProp")] public new Color BackColor { get { return backColor; } set { backColor = value; if (!base.ReadOnly) base.BackColor = value; } }
Par contre, si je remplace le mot clé "new" par "override", ça ne fonctionne plus du tout de la même façon. En effet :
- Je place mon contrôle sur la form : aucun problème, il apparaît avec sa couleur de fond par défaut.
- Je change la couleur de fond : rien ne se passe, le contrôle ne subit pas la modification de BackColor
- Je clique sur un autre contrôle de la form (perte du focus en mode design) : la partie contenant du texte de mon contrôle se colorie avec la couleur de fond (coloriage partiel ???), comme ceci :
- Je recompile avec F6, la couleur de fond est alors correcte :
J'avoue ne pas comprendre du tout comment j'arrive de la sorte à remplir partiellement la couleur de fond d'un contrôle (fonction non prévue), et pourquoi le remplissage correct ne s'effectue qu'en recompilant avec F6.
Avec new, ça fonctionne parfaitement, et donc je ne suis pas bloqué, mais j'ai quand même besoin de savoir le mécanisme qui amène à ce fonctionnement.
Notez qu'en mode exécution, le fonctionnement est identique et le contrôle utilisé avec override fonctionne comme celui avec new, l'anomalie n'apparaît qu'en mode design.
J'ajoute que "override" me semblait plus approprié que "new", parce que si j'accède à la propriété BackColor dans un programme en faisant un cast (TextBox) de mon contrôle, ça me permettait, contrairement à new, d'accéder à la propriété dérivée. Avec "new", j'accéderais à la propriété de TextBox, et donc fonctionnement incorrect éventuel.
Merci d'avance
Claude
Partager