Entwickler-Ecke
WinForms - DefaultValue Attribut bei Brush?
C# - So 23.03.14 15:24
Titel: DefaultValue Attribut bei Brush?
Hey Leute,
weiß jemand wie ich bei einem Brush ein DefaultValue festlegen kann? Also sowas in der Art:
C#-Quelltext
1: 2:
| [DefaultValue(typeof(Brush), "new SolidBrush(Color.White)")] public Brush Background { get; set; } |
Th69 - So 23.03.14 16:03
Hallo C#,
was erwartest du denn von der DefaultValue-Zuweisung? Dies ist nur ein Attribut für den VS-Designer (oder andere Codegeneratoren).
Um den Initialwert zu setzen, mußt du bei einer Eigenschaft diesen im Konstruktor setzen.
Bei
Color funktioniert
C#-Quelltext
1:
| [DefaultValue(typeof(Color), "White")] |
, aber ob
C#-Quelltext
1:
| [DefaultValue(typeof(Brush), "White")] |
auch so funktioniert, müsstest du ausprobieren (falls du wirklich
DefaultValue benötigst).
Ralf Jansen - So 23.03.14 16:10
Wofür soll das gut sein wenn es ginge?
Das DefaultValueAttribute ist rein informell (Designer Code etc.) und wird nicht beim instantiieren einer Klasse verwendet. Und der informelle Teil würde zumindest im Winforms Designer nicht funktionieren da Brushes nicht vergleichbar sind also
new SolidBrush(Color.White) == new SolidBrush(Color.White) würde false ergeben.
Wenn du der Property einen Startwert geben willst mach das im Konstruktor der Klasse.
Moderiert von
Th69: C#-Tags hinzugefügt
C# - So 23.03.14 16:14
Ja ich weiß dass das nur für Desinger und gut ist. Ich mache gerade ein eigenes Control und da wollt ich der Optik halber Standardwerte benutzen. Diese werden auch alle im Konstruktor via Reflection gesetzt.
C#-Quelltext
1: 2: 3: 4: 5: 6:
| foreach (PropertyDescriptor prop in TypeDescriptor.GetProperties(this)) { DefaultValueAttribute attr = (DefaultValueAttribute)prop.Attributes[typeof(DefaultValueAttribute)]; if (attr != null) prop.SetValue(this, attr.Value); } |
Wäre halt schön gewesen wenn das mit nem Brush auch ginge, aber dann mach ichs halt manuell.
@TH69
[DefaultValue(typeof(Brush), "White")] funktioniert leider nicht.
Ralf Jansen - So 23.03.14 16:45
attr.Value wird immer noch der string sein. Bei Color könnte das klappen da es einen TypeConverter für die Konvertierung String Literal nach Color Objekt gibt. Das gibt es für Brushes nicht (Da Brushes abstrakt sind kann es den auch gar nicht geben du musst schon eine konkrete Brush Ableitung nehmen). Wenn du das nur im Code brauchst kannst du dir einen eigenen TypeConverter für SolidBrush schreiben der würde dann automatisch beim setzen der Property verwendet. Das wird dir aber nicht im Designer helfen da du nachträglich den TypeConverter nicht so an die SolidBrush Klasse gehängt bekommst das er dort ziehen könnte.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!