Ich hab 2 Arten von Base-Formen.
class BaseForm : System.Windows.Forms.Form, ITransportHandler
und eine
class DockableBaseForm : Irgendeine.Andere.DockingLibrary.Form, ITransportHandler
Irgendeine.Andere.DockingLibrary.Form ist natürlich irgendwo eine System.Windows.Forms.Form, aber da komm ich erstmal nicht dran.
ich kann jetzt über das ITransportHandler interface daten an das fenster schicken.
Um die Sache noch komplizierter zu machen, gibt es auch
SpecialForm : BaseForm
und
SpecialDockableForm : DockableBaseForm
. Beide stellen das selber da, aber das eine ist eben dockable, das andere nicht.
ist relativ dumm.
am liebsten hätte ich so eine art
class Window : Form
{
public Window(Form innerForm)
{
this.InnerForm = form;
}
public Form InnerForm { get; private set; }
}
leider lassen sich ja aber nicht alle properties/funktionen von Form überschreiben, so dass ich eine Form ja nicht komplett wrappen kann.
hat sonst jemand ne idee wie ich das geschickt machen könnte?
eine andere wäre sowas wie
public class Window<T> where T: Form, new()
{
public Window()
{
this.InnerForm = new T();
}
public T InnerForm
{
get; private set;
}
}
wobei man dann für Window all das neu schreiben müsste, was es für form schon gibt. da man dann auch keinen designer hat, müsste man dann von hand die controls hinzufügen. ist eben recht mühseelig.
Kannst du nicht eine gemeinsame Basisklasse machen, die von der Dockable-Form erbt und das Docking für die "normale" Form irgendwie ausstellen?
Also nach dem Prinzip:
class DockableBaseForm : DockableForm, ITransportHandler { }
class BaseForm : DockableBaseForm {
public BaseForm() {
this.DockingEnabled = false;
}
}
Gruß, Christian.
Hallo esskar,
Beide stellen das selber da, aber das eine ist eben dockable, das andere nicht.
soweit so gut. Und wo ist jetzt das Problem?
herbivore
so dass ich eine Form ja nicht komplett wrappen kann.
überschreiben hat ncihts mit wrappen zu tun. eine form kannst du sehr wohl warppen. nur eben nicht alles überschreiben. das sind 2 paar schuhe und wrappen hat ncihts mit vererbung zu tun.
wrappen setzt man ein wenn man nciht erben kann.
das was du vermutlich suchst nennt sich (namen vergessen...war das nicht sogar ein designpattern?) verda.... ok es hat mit wrappen zu tun. du erstellst eine klasse, die im konstruktor das zu wrappende objekt annimmt und dann legen sich die methoden um das gewrappde objekt wobei das innere objekt nicht mehr zu erreichen ist, sondern nur noch der wrapper. weiterhin darfst du dann ab da nur noch mit dem wrapper arbeiten.
die abgemilderte form davon sind nur teilweise wrapper, die ein bestimmtes verhalten hinzufügen. meist hängen sich diese an events und machen dann auf dem objekt irgendwelche standardaktionen (oft gut um zusammenhang mit styles wechseln/hinzufügen)
namen vergessen...war das nicht sogar ein designpattern?
Meinst du Proxy?
Gruß, Christian.