Erstelle gerade eine kleine Applikation mit einem MDI-Container, einem BaseFrame und einzelnen Frames, die abgeleitet sind von der BaseFrame. So weit alles ok. Wenn ich aber die Ableitung in die Frames eintrage, wird mir in der Entwurfs-Ansicht nicht mehr das Frame angezeigt, sondern die Fehlermeldung "Der Konstruktor für den Typ BaseFrame wurde nicht gefunden."
Sobald ich die Ableitung rausnehme, geht alles wieder wie gewohnt.
public partial class BaseFrame : Form
{
public const int fsEmpty = 0;
private ToolStripMenuItem p_MenuItem;
public BaseFrame(ToolStripMenuItem ParentMenuItem)
{
InitializeComponent();
p_MenuItem = ParentMenuItem;
SetButtonStatus(p_MenuItem, false);
this.Closed += new System.EventHandler(this.BaseFrame_Closed);
}
public partial class frmCountry : BaseFrame
{
public frmCountry(ToolStripMenuItem mItem, int iStatus) : base(mItem)
{
InitializeComponent();
}
}
bei System.RuntimeType.CreateInstanceImpl(BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes)
bei System.Activator.CreateInstance(Type type, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes)
bei System.ComponentModel.Design.DesignSurface.CreateInstance(Type type)
bei Microsoft.VisualStudio.Design.VSDesignSurface.CreateInstance(Type type)
bei System.ComponentModel.Design.DesignerHost.System.ComponentModel.Design.IDesignerHost.CreateComponent(Type componentType, String name)
bei System.ComponentModel.Design.Serialization.DesignerSerializationManager.CreateInstance(Type type, ICollection arguments, String name, Boolean addToContainer)
bei System.ComponentModel.Design.Serialization.DesignerSerializationManager.System.ComponentModel.Design.Serialization.IDesignerSerializationManager.CreateInstance(Type type, ICollection arguments, String name, Boolean addToContainer)
bei System.ComponentModel.Design.Serialization.TypeCodeDomSerializer.Deserialize(IDesignerSerializationManager manager, CodeTypeDeclaration declaration)
bei System.ComponentModel.Design.Serialization.CodeDomDesignerLoader.PerformLoad(IDesignerSerializationManager manager)
bei Microsoft.VisualStudio.Design.Serialization.CodeDom.VSCodeDomDesignerLoader.PerformLoad(IDesignerSerializationManager serializationManager)
bei System.ComponentModel.Design.Serialization.BasicDesignerLoader.BeginLoad(IDesignerLoaderHost host)
Der Designer verlangt parameterlose Konstruktoren, und zumindest in deinen geposteten Code sind die nicht vorhanden.
Baka wa shinanakya naoranai.
Mein XING Profil.
Hallo GambaJo,
natürlich kann man Konstruktoren mit Parametern definieren. Es geht hier aber nicht um eine Einschränkung von C#, sondern des Designers. Guck man in den designer-generierten Teil der partial class frmCountry. Darin ist bestimmt ein parameterloser Konstruktor ohne base-Klausel enthalten. Das bedeutet, dass der parameterlose Konstruktor von BaseFrame verwendet werden soll. Den gibt es aber vermutlich nicht. Definiere diesen.
herbivore
Ja, Du scheinst Recht zu haben. Hab das jetzt so umgeschrieben, daß es klappt:
public partial class frmCountry : BaseFrame
{
public frmCountry(ToolStripMenuItem mItem, int iStatus)/* : base(mItem)*/
{
InitializeComponent();
base.SetButtonStatus(mItem,false);
}
}
public partial class BaseFrame : Form
{
public const int fsEmpty = 0;
private ToolStripMenuItem p_MenuItem;
public BaseFrame()
{
InitializeComponent();
this.Closed += new System.EventHandler(this.BaseFrame_Closed);
}
Ich würd aber trotzdem gern Parameter an die Klasse BaseFrame übergeben, habe aber die Stelle im Designer nicht gefunden, wo ich den ostruktor entsprechend abändern muß. Gibt's da ein Beispiel zu?
Hallo GambaJo,
Der Designer verlangt parameterlose Konstruktoren,
mach für jeden zu "übergebenden" Wert eine Property und setze diese Properties, nach dem das Form erzeugt ist.
herbivore
PS: Du kannst natürlich zusätzlich die Konstruktoren mit den Parametern weiter verwenden. Eine Klasse kann bel. viele Konstruktoren besitzen.