Benutzerdefinierte Steuerelemente und Ihre Eigenschaften im Properties Window
-
Hallo,
ich programmiere ein Benutzerdefiniertes Steuerelement, das von UserControl abgeleitet ist. Dabei möchte ich ein Paar Eigenschaften dem Steuerelement hinzufügen, die im Properties Window angezeigt werden sollen. Der folgende Source Code zeigt wie ich das mache:
public: property bool MyProperty { bool get() { return m_bMyPropertyValue; } void set(bool val) { m_bMyPropertyValue = val; } }
Diese Eigenschaft erscheint aber im Properties Window nicht!
Darüber hinaus ist es hoch interessant zu erfahren, wie man überhaupt auf das Toolbox in VS zugreift (neue Controls installiert, die mit Icons und Properties aufgelistet werden). Hat jemand vielleicht damit Erfahrung?Danke im voraus.
-
martin_pavel schrieb:
ich programmiere ein Benutzerdefiniertes Steuerelement, das von UserControl abgeleitet ist.
Hmh, muss man da nicht Attribute definieren? Attribute Class
martin_pavel schrieb:
Darüber hinaus ist es hoch interessant zu erfahren, wie man überhaupt auf das Toolbox in VS zugreift
Vllt hilft
http://www.c-plusplus.net/forum/viewtopic-var-t-is-216041.html
-
bei einem custom control was ich hier rumliegen hab wurde sowas vor dem property geschrieben
#region PlusMinusLineColor private Color _plusMinusLineColor = Color.DarkGray; /// <summary> /// Gets or Sets the color of the lines if ShowPlusMinus property is enabled /// </summary> [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible), DefaultValue(typeof(Color), "DarkGray")] [Browsable(true), Description("Gets or Sets the color of the lines if ShowPlusMinus property is enabled")] public Color PlusMinusLineColor { get { return _plusMinusLineColor; } set { _plusMinusLineColor = value; if(Created) Invalidate(); } } #endregion
das wird in dem property fenster problemlos angezeigt
-
Das sieht in C++/CLI ungefähr so aus (getestet):
*.h
#pragma region BackgroundColor private: System::Drawing::Color m_BackColor; /// <summary> /// Gets or Sets the color of the Background /// </summary> public: property System::Drawing::Color BackgroundColor { [DesignerSerializationVisibility(DesignerSerializationVisibility::Visible), DefaultValue(System::Drawing::Color::typeid, "Blue")] [Browsable(true), Description("Gets or Sets the color of the Background")] System::Drawing::Color get(void); void set(System::Drawing::Color kColor); } #pragma endregion
*.cpp
#pragma region BackgroundColor System::Drawing::Color TestControlControl::BackgroundColor::get(void) { return this->m_BackColor; } void TestControlControl::BackgroundColor::set(System::Drawing::Color kColor) { m_BackColor = kColor; //if(Created) Invalidate(); } #pragma endregion
Leider ändert sich nicht die Farbe des Controls im Designer, es bleibt bei der Default-Einstellung, in diesem Fall Blau.
-
die Farbe ändert sich schon, wenn du halt was Sinnvolles damit machst (z.b. im OnPaint event diese einstellst oder so)...
Aber dafür muss man halt nicht nur irgendwelche Member-Variablen setzen, sondern wirklich was damit machen.
Allerdings muss ich sagen, dass ich genau mit diesen Dingen auch lange zu kämpfen hatte (v.a., wenns dann so weit geht, selbst definierte Anzeigen ins Property-Grid einzupflegen).
Aber wenn man das dann mal hat, dann verwendet man auch ganz gerne mal ein Propertygrid als Control in normalen WinForms GUIs
-
Wenn man die Farbe über die Eigenschaften ändert und sonst nichts macht, passiert im Designer erst mal gar nichts. Erst wenn das Control verschoben oder in der Größe geändert wird, dh. wenn das Control neu gezeichnet werden muss, dann ändert sich auch die Farbe im Designer.
Aber dafür muss man halt nicht nur irgendwelche Member-Variablen setzen, sondern wirklich was damit machen.
-
Danke für die Hilfe
. Das hat mich weiter gebracht.
Noch eine Frage:
Beim anlegen eines neuen Steuerelements kann man direkt angeben, von welchem Control (zum Beispiel Forms::Label) das neue Steuerelement abgeleitet werden soll?
-
soweit ich weiss nicht, muesste stets in dem eigenen bereich landen