Entwickler-Ecke
Basistechnologien - DefaultValue von Font Property setzen
mariog86 - Do 23.08.07 14:36
Titel: DefaultValue von Font Property setzen
Hallo
Ich habe ein Property vom Typ Font, welches ich mit dem Standartwert SystemFont.DefaultFont initialisiere. Nun möchte ich dem mit dem DefaultValueAttribute einen Standartwert für den Designer zuweisen. Allerdings kann ich damit ja nur einen Hardgecodeten string zuweisen. Das Problem ist aber das der SystemFont.DefaultFont je nach Systemeinstellung des Users ein anderer sein kann, ausserdem kann ich das FontPropertie Font.GdiCharSet mit dem Hardgecodeten String nicht festlegen. Allerdings ist dieses Property wenn man eine neues Font-Objekt erzeugt standartmässig auf 1 in SystemFont.DefaultFont jedoch auf 0 gesetzt. Es ist also so nicht möglich einen DefaultWert zu definierten der SystemFont.DefaultFont entspricht.
Das Font Property der Control-Klasse hat aber auch einen Stanndartwert gesetzt, also muss das irgendwie möglich sein.
Wie kann ich also das gleiche Verhalten erreichen wie z.B. bei der Control-Klasse?
Christian S. - Do 23.08.07 15:52
Hm. Ich habe noch nicht damit gearbeitet, aber Du solltest Dich mal in das Thema "TypeDescriptor", "ICustomTypeDescriptor" und evt. auch "AttributeProviderAttribute" einlesen.
Kha - Do 23.08.07 17:34
TypeDescriptors sind ziemlich mächtige Viecher, was wie so oft mit Komplexität einhergeht. Für Interessierte gab es vor nicht allzu langer Zeit dazu einen Artikel im MSDN-Mag, für alle anderen würde ich aber einen anderen Weg vorschlagen ;) .
mariog86 hat folgendes geschrieben: |
Das Font Property der Control-Klasse hat aber auch einen Stanndartwert gesetzt, also muss das irgendwie möglich sein. |
Dann schau doch im Reflector nach, wie es Control macht :zwinker: .
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28:
| Font font2;
[AmbientValue(null)] public Font Font2 { get { return font2 ?? DefaultFont; } set { if (value != font2) { if (font2 != null) font2.Dispose(); font2 = value; } } }
public void ResetFont2() { font2 = null; }
bool ShouldSerializeFont2() { return font2 != null; } |
PS: Das wären dann 4 € in unsere Standart-Kaffeekasse.
mariog86 - Fr 24.08.07 08:11
Guten morgen allerseits.
Vielen Dank für die schnellen Antworten.
@ Khabarakh: Deine Lösung hat super funktioniert, allerdings musst du mir noch erklären, wie du schauen kannst wie es das Control macht, wenn ich mir das mit Go To Definition anschauen möchte, sehe ich jeweils nur die Header und nur die sichtbaren.
Kha - Fr 24.08.07 10:38
Die Antwort ist bereits in meinem letzten Beitrag versteckt ;) :
REFLECTOR.
[OT]Hut ab für Herrn Roeder. Dass die Suche nun schon bei diesem einzigen Stichwort funktioniert... [/OT]
mariog86 - Fr 24.08.07 13:09
Wusste gar nicht dass man private Member und sogar Code wieder aus den dll's herausholen kann. Wirklich ein tolles Tool dieser Refelctor.
Danke für den Tipp.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 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!