Autor Beitrag
C#
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 561
Erhaltene Danke: 65

Windows 10, Kubuntu, Android
Visual Studio 2017, C#, C++/CLI, C++/CX, C++, F#, R, Python
BeitragVerfasst: So 23.03.14 15:24 
Hey Leute,

weiß jemand wie ich bei einem Brush ein DefaultValue festlegen kann? Also sowas in der Art:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: 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
ausblenden C#-Quelltext
1:
[DefaultValue(typeof(Color), "White")]					

, aber ob
ausblenden C#-Quelltext
1:
[DefaultValue(typeof(Brush), "White")]					

auch so funktioniert, müsstest du ausprobieren (falls du wirklich DefaultValue benötigst).
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: 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 user profile iconTh69: C#-Tags hinzugefügt
C# Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 561
Erhaltene Danke: 65

Windows 10, Kubuntu, Android
Visual Studio 2017, C#, C++/CLI, C++/CX, C++, F#, R, Python
BeitragVerfasst: 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.
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
// Set default values
      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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: 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.