Laden...

Vererbung/Forms: Designer kann keine Instanz des Types erstellen, da dieser als abstract dekl.

Erstellt von SimpsonFire vor 12 Jahren Letzter Beitrag vor 12 Jahren 1.978 Views
S
SimpsonFire Themenstarter:in
13 Beiträge seit 2011
vor 12 Jahren
Vererbung/Forms: Designer kann keine Instanz des Types erstellen, da dieser als abstract dekl.

Hallo,
habe ein Basis Formular von dem ich alle anderen Formulare ableite.
in meinem Basis Formular habe ich eine Methode deklariert, die ich von den abgeleiteten Formularen überschreiben möchte.

Mein Ansatz:


public  abstract partial   class frmbasis
{
 abstract public void Methode1(ViewStatus s);
}


Das funktioniert auch mit overwrite der Methode1 in den abgeleiteten Formularen.
Nur kann ich wegen abstract den Designer der abgeleiteten Formulare nicht mehr starten.

Fehlermeldung:
Der Designer kann keine Instanz des Types ...... erstellen, da dieser als abstrakt deklariert ist.

Gibt es noch ne andere möglichkeit ?

Gruß

G
538 Beiträge seit 2008
vor 12 Jahren

ich würde vermuten du versuchst ein frmbasis zu bearbeiten - das geht nicht.

Der Vorteil der Klugheit liegt darin, dass man sich dumm stellen kann - umgekehrt ist das schon schwieriger (K. Tucholsky)
Das Problem mit Internet-Zitaten ist, dass sie oftmals zu unrecht als authentisch angenommen werden. (K. Adenauer)

S
SimpsonFire Themenstarter:in
13 Beiträge seit 2011
vor 12 Jahren

Nein.

Habe ein Formular frmBasis.
Und ein Formular FrmC was von frmBasis erbt.
Also .... FrmC : frmBasis

Möchte jetzt auf Methode1 zugreifen.
Damit ich das realisieren kann muss ich diese in frmBasis angeben. Das mache ich mit:

 
public  abstract partial   class frmbasis
{
abstract public void Methode1();
}

wichtig ist dabei "abstract"

Die eigentliche Methode befindet sich dann aber in der abgeleiteten Form FrmC
die natürlich auch mit Methode1 bezeichnet werden muß.


  public override  void Methode1()
        {
        }


Nur kann ich jetzt das Formular FrmC nicht mehr mit dem Designer öffnen.
Das ist mein großes Problem. Gibt es dafür eine Lösung ?

Gruß

296 Beiträge seit 2007
vor 12 Jahren

Hallo SimpsonFire,

vielleicht keine gute Lösung, aber du könntest die Basis-Klasse zur Designzeit als 'nicht abstract' deklarieren und die abstrakten Methoden als 'virtual'. Ich denk so kannst du den Designer überreden.

Aber schön ist das auch nicht...

G
538 Beiträge seit 2008
vor 12 Jahren

Okay - ich hab's mal versucht und kann das Problem nachvollziehen.

Interessant aber, dass man ohne weiteres die Abstrakte Form selbst bearbeiten kann...

Vielleicht wird dir das helfen können:

MSDN Social: UserControl, Inherited Control, Abstract class, (C#)
Dort im letzten Abschnitt ist ein Workaround, der Funktionieren dürfte.

Der Vorteil der Klugheit liegt darin, dass man sich dumm stellen kann - umgekehrt ist das schon schwieriger (K. Tucholsky)
Das Problem mit Internet-Zitaten ist, dass sie oftmals zu unrecht als authentisch angenommen werden. (K. Adenauer)

F
10.010 Beiträge seit 2004
vor 12 Jahren

Das Thema haben wir schon oft gehabt.

Der Designer versucht beim aufruf einer Form den Parent zu instantiieren und dann die in InitializeComponents stehenden Anweisungen auszuführen.
Deshalb muss der direkte parent einer Form eben auch instanziierbar sein.
Oder man muss den Designer beibringen was er anders machen kann/soll.

Using a Windows Form as an abstract class - which pattern to use?