2016-11-12 2 views
2

Ich wollte benutzerdefinierte Steuerelemente für Windows-Formulare erstellen, die beide meine CustomControl-Basisklasse (mit meinen benutzerdefinierten Eigenschaftenmethoden) aber die Steuerelemente nicht erstellen möchten Scratch, also möchte ich die bereits bestehenden erweitern.Benutzerdefinierte WinForms-Steuerelemente mit System.Windows.Forms und benutzerdefinierten Basisklassen

Ich weiß, dass es nicht möglich ist, zwei abstrakte Klassen zu erweitern, aber ich brauchte einige Einblicke, wie diese Dinge zu erreichen sind.

In diesem Szenario wollte ich so etwas haben:

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... 
} 

so in einer neuen Form, Ich würde Customlabel zu dem Formular hinzufügen und ordnungsgemäß funktionieren ...

Irgendwelche Ideen?

Antwort

2

Sie können mit diesen Optionen prüfen auf Anforderungen basieren:

  • Sie eine Basis schaffen können UserControl gemeinsamen Eigenschaften und Methoden enthält. Statt sie von diesen Steuerelementen abzuleiten, hosten Sie sie dann unter UserControl und setzen Sie das ursprüngliche Steuerelement als öffentliche Eigenschaft frei.

  • Durch die Implementierung von Extender-Provider-Komponenten durch Implementierung von IExtenderProvider können Sie Steuerelementen einige Eigenschaften hinzufügen, ohne von diesen Steuerelementen zu stammen. A ToolTip oder ErrorProvider oder HelpProvider sind Beispiele für solche Komponenten.

  • Mit NativeWindow können Sie Nachrichten eines Steuerelements verarbeiten und seine WndProc überschreiben, ohne von diesem Steuerelement abgeleitet werden zu müssen. Sie können das systemeigene Fenster verwenden, wenn Sie eine Extender-Komponente implementieren.

  • Sie können Extension Methods verwenden, um vorhandenen Steuerelementen einige Methoden hinzuzufügen, ohne von diesen Steuerelementen abzuleiten.

  • Sie können eine Klasse erstellen, die einige Eigenschaften und Methoden enthält, und dann beim Erstellen dieser abgeleiteten Steuerelemente eine Eigenschaft des Typs dieser Klasse definieren. Ihre abgeleiteten Steuerelemente können diese Klasse verwenden, um einige gemeinsame Eigenschaften und Methoden zu haben. Auch wenn Sie einige sich ändernde und geänderte Ereignisse in dieser Klasse wie die Implementierung von INotifyPropertyChanged implementieren, können abgeleitete Steuerelemente diese Ereignisse abonnieren und einige Operationen basierend auf Änderungen ausführen.

+0

Welche Lösung haben Sie verwendet? –

+0

IExtenderProvider – user1592987

+0

Gute Arbeit, alle Optionen sind nützlich und haben ihre eigenen Nutzungen. Diese sind wie eine Toolbox und Sie sollten die richtige für den richtigen Job auswählen, wenn Sie brauchen. –

Verwandte Themen