Laden...

Der Konstruktor für den Typ ... gefunden

Erstellt von GambaJo vor 17 Jahren Letzter Beitrag vor 17 Jahren 5.149 Views
GambaJo Themenstarter:in
105 Beiträge seit 2006
vor 17 Jahren
Der Konstruktor für den Typ ... gefunden

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)
6.862 Beiträge seit 2003
vor 17 Jahren

Der Designer verlangt parameterlose Konstruktoren, und zumindest in deinen geposteten Code sind die nicht vorhanden.

Baka wa shinanakya naoranai.

Mein XING Profil.

GambaJo Themenstarter:in
105 Beiträge seit 2006
vor 17 Jahren

Ich bin mir nicht sicher, ob ich dich verstehe. Ich hab mal die Parameter aus den Konstruktoren entfernt, hat aber nicht geholfen.

Hier gibt es aber auch ein Beispiel mit Konstruktoren mit Parametern.

49.485 Beiträge seit 2005
vor 17 Jahren

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

GambaJo Themenstarter:in
105 Beiträge seit 2006
vor 17 Jahren

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?

49.485 Beiträge seit 2005
vor 17 Jahren

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.

GambaJo Themenstarter:in
105 Beiträge seit 2006
vor 17 Jahren

Jetzt hab ich es. Hab zwei Konstruktoren in BaseFrame. Einen mit und einen ohne Parameter.