Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Form-Wrapper ?
esskar
myCSharp.de - Member

Avatar #avatar-2885.jpg


Dabei seit:
Beiträge: 203
Herkunft: Dubai

Themenstarter:

Form-Wrapper ?

beantworten | zitieren | melden

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?
private Nachricht | Beiträge des Benutzers
esskar
myCSharp.de - Member

Avatar #avatar-2885.jpg


Dabei seit:
Beiträge: 203
Herkunft: Dubai

Themenstarter:

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
TheBrainiac
myCSharp.de - Member

Avatar #avatar-3152.png


Dabei seit:
Beiträge: 795
Herkunft: /dev/null

beantworten | zitieren | melden

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"
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

Hallo esskar,
Zitat
Beide stellen das selber da, aber das eine ist eben dockable, das andere nicht.
soweit so gut. Und wo ist jetzt das Problem?

herbivore
private Nachricht | Beiträge des Benutzers
Gelöschter Benutzer

beantworten | zitieren | melden

Zitat
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)
TheBrainiac
myCSharp.de - Member

Avatar #avatar-3152.png


Dabei seit:
Beiträge: 795
Herkunft: /dev/null

beantworten | zitieren | melden

Zitat von JAck30lena
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"
private Nachricht | Beiträge des Benutzers