Laden...

Vererbung von Forms mit Visual Studio 2005

Erstellt von roddy vor 17 Jahren Letzter Beitrag vor 15 Jahren 3.797 Views
R
roddy Themenstarter:in
42 Beiträge seit 2006
vor 17 Jahren
Vererbung von Forms mit Visual Studio 2005

Hallo zusammen,

ich möchte unter Benutzung von MS Visual Studio 2005 Forms vererben. Meine Vorstellung ist in etwa so:

PapaForm enthält das Grundgerüst, sowie den Bildschirminhalt in der oberen Hälfte des Bildschirms
SohnForm enthält einen Bildschirminhalt für die untere Hälfte des Bildschirms
TochterForm enthält einen anderen Bildschirminhalt für die untere Hälfte des Bildschirms

Dabei würde ich auch noch ganz gern den GUI-Designer von Visual Studio verwenden, allerdings tauchen hier die Probleme auf.

Wenn ich SohnForm schreibe:


namespace bla
{
    class SohnGUI : PapaGUI
    {
        public SohnGUI(Object blub)
            : base(blub)
        {
        }
    }
}     

...und mir das ganze dann mit dem GUI-Designer anschauen will, meldet Visual Studio "Constructor on type PapaGUI not found. Und das obwohl ich den namespace von PapaGUI unter using eingefügt hab.

Hat jemand eine Idee, was ich falsch mache? Oder gibt es prinzipielle Gründe, warum man GUIs nicht vererben sollte?

1.373 Beiträge seit 2004
vor 17 Jahren

Hallo,

Der Designer benötigt einen Defaultconstructor, also einen c'tor ohne Parameter.

Grüße,
Andre

R
roddy Themenstarter:in
42 Beiträge seit 2006
vor 17 Jahren

Erstmal danke, das hat mein Problem fürs erste gelöst, allerdings renn ich direkt in das nächste Problem...

Ich greife in meiner PapaGUI auf eine Methode aus einer statischen Klasse zu:


            this.label1.Text = MainClass.gimmeLabel();

Das funktioniert in der PapaGUI wunderbar, aber wenn ich die SohnGUI mit dem Designer öffnen will sagt er mir:

Object reference not set to an instance of an object.
Hide

at IFCC.referencing.projects.AbstractGUI.InitializeComponent() in PapaGUI.cs:line 342 (= das Codeschnipsel oben - teil der InitializeComponents()-Methode)
at IFCC.referencing.projects.AbstractGUI..ctor() in PapaGUI.cs:line 113 (= InitializeComponents())

121 Beiträge seit 2006
vor 17 Jahren

Hallo,

zum Vererben von Forms gibts eigentlich eine Vorgehensweise in Visual Studio.

Die ursprüngliche Form in einem Library Projekt erstellen

In einem zweiten Projekt: Hinzufügen -> neues Element -> Geerbtes Formular,
dann den Bezug zum ursprünglichen Fenster herstellen. (das Library Projekt natürlich zur Solution hinzufügen)

Dann kannst Du im geerbten Formular Sachen hinzufügen, die im beerbten definiert sind. Und Sachen, die sich im beerbten Formular ändern, schlagen durch.

Oder paßt das nicht zu Deiner Anforderung?

Gruß Hape

R
roddy Themenstarter:in
42 Beiträge seit 2006
vor 17 Jahren

Danke für die schnelle Antwort!

Ich fürchte nur das passt nicht zu meiner Anforderung. Ich muss eben in der "PapaGUI" auf aktuelle Werte des Projekts zugreifen, das dürfte nicht funktionieren, wenn ich sie in einer Library "outsource"...

121 Beiträge seit 2006
vor 17 Jahren

Hi roddy,

Du kannst **auch innerhalb **eines Projektes Forms auf die beschriebene Weise be- und vererben, mußt nur vorher einen Build durchführen, und Dich dann auf die erzeugte DLL oder EXE beziehen. Das geht schon auch innerhalb!

Schöne Grüße,
Hape

R
roddy Themenstarter:in
42 Beiträge seit 2006
vor 17 Jahren

Eigentlich dürfte es aber doch kein Unterschied sein ob ich das inherited Form / geerbtes Formular aus einer DLL nehme oder aus einer C#-Datei in meinem Projekt, oder sehe ich da was falsch?

Ich hatte schon versucht das ganze als inherited Form die von meiner PapaGUI erbt zu implementieren (PapaGUI dabei als Klasse im Projekt). Allerdings führt das zum selben Fehler...

R
roddy Themenstarter:in
42 Beiträge seit 2006
vor 17 Jahren

Mit Hilfe eines Artikels hier:

http://www.magerquark.de/blog/index.php/archive/date/2006/06/

konnte ich das Problem nun lösen.

1
310 Beiträge seit 2006
vor 15 Jahren

Stehe auch vor dem Problem und bei mir funktioniert die Lösung von hape nicht in VS2008 mit .Net3.5. Ich möchte eine Form erstellen, von der dann andere Forms erben können und diese sollen dann auch noch im Designer darstellbar sein.

Hier meine Schritte:

1.) Erstellen einer Windows Forms Control Library
2.) Hier eine Form ein bisschen formatieren und das ganze mal laufen lassen.
3.) Ein neues Windows Forms Projekt erstellen
4.) Reference zur erstellten dll im bin-Ordner der Controll-Library hinzufügen
5.) Add --> New Item --> Inherited Form: Hier soll ich die dll auswählen, von der die Form geerbt werden soll. Wähle ich hier wieder die dll aus der erstellten Controll-Library aus passiert nichts, der OK-Button bleibt disabled.

Was mache ich denn da falsch?