Autor |
Beitrag |
C#
      
Beiträge: 561
Erhaltene Danke: 65
Windows 10, Kubuntu, Android
Visual Studio 2017, C#, C++/CLI, C++/CX, C++, F#, R, Python
|
Verfasst: So 23.03.14 15:24
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; } |
_________________ Der längste Typ-Name im .NET-Framework ist: ListViewVirtualItemsSelectionRangeChangedEventHandler
|
|
Th69
      

Beiträge: 4798
Erhaltene Danke: 1059
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: 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
      
Beiträge: 4708
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: 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# 
      
Beiträge: 561
Erhaltene Danke: 65
Windows 10, Kubuntu, Android
Visual Studio 2017, C#, C++/CLI, C++/CX, C++, F#, R, Python
|
Verfasst: 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.
_________________ Der längste Typ-Name im .NET-Framework ist: ListViewVirtualItemsSelectionRangeChangedEventHandler
|
|
Ralf Jansen
      
Beiträge: 4708
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: 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.
|
|
|