2008-12-27 12 views
1

Je souhaite étendre le contrôle System.Windows.Forms.ComboBox avec une propriété ReadOnly, qui affiche le texte de l'élément sélectionné (similaire à une étiquette) lorsque ReadOnly = true. (Je n'aime pas l'aspect désactivé obtenu en réglant Enabled = false)Extend System.Windows.Forms.ComboBox

Comment faire cela en Winforms? C'était très simple dans ASP.NET où tout ce que j'avais à faire était de surcharger la méthode Render. Cela ne semble pas si simple avec Winforms cependant.

D'après ce que je crois que je dois

a) Remplacer la méthode OnPaint

b) Appel this.SetStyle (ControlStyles.UserPaint, true) de sorte que OnPaint est appelée.

Mais maintenant, il semble que je doive faire TOUS les tableaux moi-même. Est-ce vrai? Est-il impossible de laisser la ComboBox de base s'occuper de peindre le contrôle quand ReadOnly = false? De plus, quels ControlStyles devrais-je utiliser?

Répondre

0

Placez un contrôle ComboBox sur un UserControl. UserControl passerait à travers la plupart des propriétés et des événements, mais en réponse à la propriété .ReadOnly, il masquerait le contrôle ComboBox et afficherait une zone d'édition ReadOnly à la place.

+0

Puis-je transmettre automatiquement les propriétés et les événements de la zone de liste déroulante via mon contrôle? – Preets

+0

Pas facilement. Vous devrez déléguer les plus intéressants vous-même. Vous pourriez probablement mettre quelque chose ensemble en utilisant la réflexion pour construire automatiquement le code au moment de la compilation, cependant. –

1

Faire ce que Windows fait.
Ayez seulement 1 article dans la liste déroulante et laissez-le être sélectionné et activé.