Laden...

Eigenes Steuerelemet, das ausschliesslich spezielle Controls enthalten darf

Erstellt von SlEasy vor 19 Jahren Letzter Beitrag vor 19 Jahren 1.352 Views
S
SlEasy Themenstarter:in
81 Beiträge seit 2004
vor 19 Jahren
Eigenes Steuerelemet, das ausschliesslich spezielle Controls enthalten darf

Hallo,

wie kann ich ein eigenes Steuerelement entwerfen, das ausschließlich spezielle Controls enthalten darf.

Wenn ich von UserControl erbe, so erbe ich auch das Property Controls, über das jegliches Control hinzugefügt werden kann. Wie kann ich es aber nun bewerkstelligen, daß ich z.B. nur Instanzen der Klasse MyClass hinzufügen kann?

Die Überprüfung soll hier zur Compilezeit und nicht zur Laufzeit erfolgen.

Danke im vorraus!

F
124 Beiträge seit 2004
vor 19 Jahren

das orginale controls.add ausblenden, in dem ein neues hinzugefügt wird, was nur folgende signatur hat:


public virtual void Add(
   Control value
);

(beim überschreiben musst du glaube ich _new _und _override _angeben)

und was nichts macht. eventuell könnte es über einen präprozessor befehl ein warning oder so auslösen ?

und dann implementierst du noch ein add:


public virtual void Add(
   MyControl value
);

dieses gibt dann dein control an base.add weiter, womit es hinzugefügt wird.

mein beschriebener plan (^^) ist noch in der alpha phase und könnte durchaus nicht möglich sein 😉

versuchs mal und erzähl, was bei raus gekommen ist

C
980 Beiträge seit 2003
vor 19 Jahren

Es ist nicht möglich den Zugriff auf Controls zu unterbinden, da die Controls-Eigenschaft der Control-Klasse nicht virtuell deklariert ist und somit nicht überschrieben werden kann. Hiden bringt wenig, da man die Instanz jederzeit in Control casten kann.

Zur Laufzeit könnte man z.b. mit dem ControlAdded Event arbeiten, aber dir geht's ja um die Kompilierzeit. Da sehe ich allerdings wenig chancen ...

F
124 Beiträge seit 2004
vor 19 Jahren

ich musste erst 2mal lesen, was du meinst, aber dann hats klick gemacht 😉

das mit dem nach control casten is irgendwie ne gemeine sache! wie wärs, wenn er beides macht? das überschreiben, um im normalen fall nen compilerfehler zu erhalten + das event behandeln, um die leute mit einer messagebox anzunerfen (g), die versuchen erstz nach control zu casten !