Laden...

Form-Wrapper ?

Erstellt von esskar vor 13 Jahren Letzter Beitrag vor 13 Jahren 1.306 Views
esskar Themenstarter:in
203 Beiträge seit 2006
vor 13 Jahren
Form-Wrapper ?

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?

esskar Themenstarter:in
203 Beiträge seit 2006
vor 13 Jahren

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.

795 Beiträge seit 2006
vor 13 Jahren

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.

`There are 10 types of people in the world: Those, who think they understand the binary system Those who don't even have heard about it And those who understand "Every base is base 10"`
49.485 Beiträge seit 2005
vor 13 Jahren

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

Gelöschter Account
vor 13 Jahren

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)

795 Beiträge seit 2006
vor 13 Jahren

namen vergessen...war das nicht sogar ein designpattern?

Meinst du Proxy?

Gruß, Christian.

`There are 10 types of people in the world: Those, who think they understand the binary system Those who don't even have heard about it And those who understand "Every base is base 10"`