Ich habe eine Checkbox in einen ToolStripControlHost eingebaut:
public class CheckboxStripItem : ToolStripControlHost
{
private CheckBox checkBox;
public CheckboxStripItem()
: base(new CheckBox())
{
checkBox = Control as CheckBox;
}
public bool Checked
{
get { return checkBox.Checked; }
set { checkBox.Checked = value; }
}
Das funktioniert soweit gut. Im Projekt Explorer wird die Klasse nicht als "normale C#" Klasse dargestellt, sondern als "andere Komponente" (siehe Scrennshot.png).
Nach einem Doppelklick auf die .cs Datei (also der obere Teil des Screenshots), kommt die Fehlermeldung des Designers > Fehlermeldung:
"Um mögliche Datenverluste zu verhindern, müssen vor dem Laden des Designers folgende Fehler behoben werden:"
. Als Fehler wird angezeigt > Fehlermeldung:
"Der Konstruktor für den Typ "System.Windows.Forms.ToolStripControlHost" wurde nicht gefunden.".
Beim Compilieren gibt es keine Probleme und das CheckboxStripItem kann ich auch in Menüs einfügen. Aber die Fehlermeldung ist doch nicht richtig?
Bei einem Klick auf die Klasse selber, unterhalb der Datei (im Projekt Explorer) wird der Source Code angezeigt und ich kann ihn auch editieren.
Wieso bekomme ich die Fehlermeldung und kann die Datei nicht "normal" editieren?
Gruß
Erwin
Der Winforms Designer benutzt ausschließlich Standardkonstruktoren.
Du benutzt
base(new CheckBox())
und dies ist kein Standardkonstruktor.
Siehe auch: how-to-avoid-error-constructor-on-type-mytype-not-found-when-inheriting-a-ba
Der Winforms Designer benutzt ausschließlich Standardkonstruktoren.
Du benutzt
base(new CheckBox())
und dies ist kein Standardkonstruktor.
Siehe auch:
>
Laut Doku braucht die Klasse ToolStripControlHost ein Control und/oder ein String im Konstruktor, einen leeren Konstruktor scheint die Klasse nicht zu unterstützten:
ToolStripControlHost Klasse (System.Windows.Forms)
Zumal der Konstruktor von CheckboxStripItem auch leer ist und dementsprechend auch ein Standardkonstruktor sein sollte?
Falls Standardkonstruktor hier missverstanden wird, dann nennen wir es eben parameterlosen Konstruktor.
Ändert aber eben nichts an der Situation.
Falls Standardkonstruktor hier missverstanden wird, dann nennen wir es eben parameterlosen Konstruktor.
Ändert aber eben nichts an der Situation.
Es gibt für ToolStripControlHost, laut Doku keinen parameterlosen Konstruktor.
Das hier
base(new CheckBox())
muss gemacht werden, wenn man von ToolStripControlHost erbt.