Autor Beitrag
mariog86
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Do 23.08.07 14:36 
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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: 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 ;) .
user profile iconmariog86 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: .
ausblenden 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 Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Fr 24.08.07 10:38 
Die Antwort ist bereits in meinem letzten Beitrag versteckt ;) : Suche bei Google REFLECTOR.

[OT]Hut ab für Herrn Roeder. Dass die Suche nun schon bei diesem einzigen Stichwort funktioniert... [/OT]
mariog86 Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: 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.