Ich entwickle gerade eine Anwendung, in der ich ein UserControl in einem Kontextmenü anzeigen möchte. Ich konnte (etwas mit ToolStripControlHost erreichen). Angezeigt in (NumericUpDownToolStripItem-Code): Unten ist Code für das Objekt (in VC++ .net 2.0 geschrieben). Hinweis: Es gibt semi-ähnliche SO-Fragen zu diesem Thema, aber keines scheint sich mit der Serialisierung von Benutzersteuerelementen zu befassen, sondern nur ein Standardobjekt in den Benutzersteuerelementen.ToolStripControlHost Hosting eines UserControl-Designers Serialisierung tritt nicht auf
Nach dem Objekt angezeigt wird der Code für die tatsächliche Benutzersteuerung, die eine Benutzersteuerung mit einem Label und eine numerische updown-Steuerelement ist.
Das Problem: Wenn ich den Designer für meine Anwendung laden, kann ich meine NumericUpDownToolStripItem problemlos hinzufügen, aber wenn ich die exposed-Eigenschaft zum Bearbeiten meiner Benutzersteuerung öffnen, wird keine dieser Daten in die InitializeComponent-Methode serialisiert meines NumericUpDownToolStripItem-Objekts. Der Effekt davon ist, dass mein Steuerelement mit allen Standardwerten zur Laufzeit geladen wird. Und jedes Mal, wenn ich mein Formular neu lade, gehen die Änderungen verloren.
Ich habe versucht, mit der TypeConverter Tutorial On Msdn, aber es hat nicht richtig funktioniert. Alles kompiliert gut, außer mein Objekt wurde im Design-Grid vollständig ausgegraut (nur die Accessor-Eigenschaft, nicht die gesamte Menupic). Ein anderes Problem, das ich bemerkt habe, ist, dass diese Methode nicht speziell für UserControls entworfen wurde, die mehrere verschiedene modifizierbare Eigenschaften haben können und möglicherweise nicht für jede eine Überladung haben können. So
, ich habe folgende Fragen:
- Ist das, was ich tue, praktisch, oder ist meine Struktur Weg-off der Normen. Ich bin mir sicher, dass die Attribute sehr redundant sind.
- Was ist die richtige Methode zum Serialisieren eines Benutzersteuerelements 'Kind' in einem anderen UserControl \ toolstriphost 'Eltern' enthalten. Alle Eigenschaften in 'Kind' sind einfache Werte (Strings, Dezimalzahlen usw.).
- Wenn die TypeConverter-Klasse nicht implementiert ist, jedes Mal wenn ich eine Eigenschaft änderte (ein Label-Text zum Beispiel), würde das Bild des Objekts alle aufgebockt werden und sich merkwürdig verhalten, bis ich das Kontextmenü oder das Formular wiederbelebte. Gibt es eine gute Möglichkeit, den Designer zu überarbeiten, weil ich eine Änderung vorgenommen habe? (Ich benutzte Invalidate, die bestenfalls zweifelhaft war).
Vielen Dank im Voraus. Ich werde das weiter erforschen und die Frage auf dem Laufenden halten.
NumericUpDownToolStripItem Class:
[ToolStripItemDesignerAvailability(ToolStripItemDesignerAvailability::All)]
public ref class NumericUpDownToolStripItem : public ToolStripControlHost
{
public:
[DesignerSerializationVisibility(DesignerSerializationVisibility::Content |
DesignerSerializationVisibility::Visible)]
property LabeledNumericUpDown ^LabeledNumericUpDownControl
{
LabeledNumericUpDown ^get() { return (LabeledNumericUpDown^)this->Control; }
}
public: NumericUpDownToolStripItem(void) :
ToolStripControlHost(gcnew LabeledNumericUpDown()) {}
protected: void OnSubscribeControlEvents(Control ^control) new { //irrelevant to question }
protected: void OnUnsubscribeControlEvents(Control ^control) new { //irrelevant to question }
};
public ref class LabeledNumericUpDown : public UserControl
{
public: [ DesignerSerializationVisibility(DesignerSerializationVisibility::Content |
DesignerSerializationVisibility::Visible)]
property String ^DisplayText {
String ^get() {
return this->label->Text;
}
void set(String ^val) {
if(this->label->Text != val)
{
this->label->Text = val;
this->Invalidate();
}
}
}
//constructor
//destructor
//initiailecomponent
};
Sorry für die Thread Auferstehung, aber dies scheint der einzige Beitrag, die ich mit genau diesem Problem zu tun finden. Ich frage mich, was Sie getan haben, um Ihren Control-Host-Designer sichtbar zu machen - ich kann es nicht erscheinen lassen, dass Visual Studio es anzeigt, egal was ich mache. Ich habe alles angewendet, von dem MSDN behauptet, dass es Designer-Unterstützung ermöglichen soll, und nichts. Einige Hinweise würden sehr geschätzt werden. –
Ich erinnere mich nicht genau, was ich getan habe, aber ich weiß, dass diese Kontrolle freigegeben wurde und "im Produkt" ist. Ich werde versuchen, den Code aufzuspüren und das Steuerelement selbst erneut zu posten, um festzustellen, ob es einen Unterschied gibt. – greggorob64
Überprüfen Sie meine neue Post unten, ich postete meine aktuelle Arbeit Setup – greggorob64