2016-11-12 3 views
2

Je souhaitais créer des contrôles personnalisés pour les formulaires Windows qui possédaient tous les deux ma classe de base CustomControl (avec mes méthodes de propriétés personnalisées) mais ne souhaitaient pas créer les contrôles depuis gratter, donc j'aimerais prolonger ceux déjà existants.Contrôles WinForms personnalisés avec les classes de base System.Windows.Forms et personnalisées

Je sais qu'il n'est pas possible d'étendre deux classes abstraites, mais j'avais besoin de quelques idées sur la façon d'accomplir ces choses.

Dans ce scénario, je voulais avoir quelque chose comme ceci:

CustomControl.cs

public abstract class CustomControl : Control 
{ 
    // some custom properties and methods here... 
} 

CustomLabel.cs

public sealed class CustomLabel : Label, CustomControl // <- i know this isn't possible 
{ 
    // some custom properties and methods here... 
} 

donc dans un nouveau formulaire, J'ajouterais Customlabel au formulaire et fonctionnerais correctement ...

Des idées?

Répondre

2

Vous pouvez envisager d'utiliser ces options en fonction des besoins:

  • Vous pouvez créer une base UserControl contenant les propriétés et méthodes communes. Ensuite, au lieu de dériver de ces contrôles, hébergez-les dans le UserControl et exposez le contrôle d'origine en tant que propriété publique.

  • La création de composants de fournisseur d'extension en implémentant IExtenderProvider vous permet d'ajouter des propriétés aux contrôles sans dériver de ces contrôles. Un ToolTip ou ErrorProvider ou HelpProvider sont des exemples de tels composants.

  • En utilisant NativeWindow vous pouvez gérer les messages d'un contrôle et remplacer son WndProc sans avoir besoin de dériver de ce contrôle. Vous pouvez utiliser la fenêtre native lors de l'implémentation d'un composant d'extension.

  • Vous pouvez utiliser Extension Methods pour ajouter des méthodes aux contrôles existants sans dériver de ces contrôles.

  • Vous pouvez créer une classe contenant des propriétés et des méthodes, puis, lors de la création de ces contrôles dérivés, définir une propriété de type de cette classe. Vos contrôles dérivés peuvent utiliser cette classe pour avoir des propriétés et des méthodes communes. En outre, si vous implémentez des événements changeants et modifiés dans cette classe, par exemple en implémentant INotifyPropertyChanged, les contrôles dérivés peuvent s'abonner à ces événements et effectuer certaines opérations en fonction des modifications.

+0

Quelle solution avez-vous utilisée? –

+0

IExtenderProvider – user1592987

+0

Bon travail, toutes les options sont utiles et ont leurs propres utilisations. Ce sont comme une boîte à outils et vous devriez choisir le bon pour le bon travail quand vous en avez besoin. –