Designerproblem bei der Vererbung von generischen Formularen

03/11/2009 - 10:37 von Carsten Ilwig | Report spam
Hi Leute,

ich habe das Problem, dass ich ein generisches Formular, welches wiederum
von einem generischen Formular erbt nicht mehr im Designer öffnen kann.
Es kommt dann immer folgender Fehler:

Der Designer konnte für diese Datei nicht angezeigt werden, da keine der
enthaltenen Klassen definiert werden kann. Der Designer hat folgende Klassen
in der Datei überprüft: Form2 -- Die
WindowsFormsApplication3.Form1-Basisklasse konnte nicht geladen werden.
Stellen Sie sicher, dass auf die Assembly verwiesen wurde und alle Projekte
erstellt wurden.


Hier der Beispielcode:

Datei Programm.cs
using System;
using System.Windows.Forms;
namespace WindowsFormsApplication3
{
static class Program
{
/// <summary>
/// Der Haupteinstiegspunkt für die Anwendung.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form2<TestObject>());
}
}
}
-
namespace WindowsFormsApplication3
{
public class TestObject { }
}
-
using System.Windows.Forms;
namespace WindowsFormsApplication3
{
public partial class Form1<TItem> : Form
{
public Form1() { InitializeComponent(); }
private System.ComponentModel.IContainer components = null;

protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
components.Dispose();
base.Dispose(disposing);
}
private void InitializeComponent()
{
this.SuspendLayout();
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(555, 155);
this.Name = "Form1";
this.Text = "Form1";
this.ResumeLayout(false);
}
}
}
-
namespace WindowsFormsApplication3
{
public partial class Form2<TItem> : Form1<TItem>
{
public Form2() {InitializeComponent();}
private System.ComponentModel.IContainer components = null;
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
components.Dispose();
base.Dispose(disposing);
}
private void InitializeComponent()
{
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(555, 155);
this.Name = "Form2";
this.Text = "Form2";
this.ResumeLayout(false);
this.PerformLayout();
}
}
}
-

Mache ich da einen Fehler, oder geht das so gar nicht wie ich mir das
vorstelle?
Das Programm an sich làuft übrigens einwandfrei.
Auch das Formular "Form2" wird fehlerfrei angezeigt.
Ich kann es nur nicht mehr im Designer öffnen.

Vielen Dank für Eure Hilfe
Carsten
 

Lesen sie die antworten

#1 Joachim Fuchs
03/11/2009 - 12:15 | Warnen spam
Hallo Carsten,

der Designer muss eine Instanz der Basisklasse anlegen. Diese darf daher
nicht generisch sein.

Gruß
Joachim


Dr. Joachim Fuchs - Autor - Dozent - Softwarearchitekt
http://www.fuechse-online.de/beruflich/index.html -
http://vbnet.codebooks.de

Ähnliche fragen