2011-12-06 13 views
1

私はコントロールのフォントのデフォルト値を取得しようとしているので、現在デフォルト値かどうかを判断できます。コントロールのフォントのデフォルト値を取得するにはどうすればよいですか?

コントロールのフォントのデフォルト値を取得するにはどうすればよいですか?その後、


// Gets the attributes for the property. 
AttributeCollection attributes = TypeDescriptor.GetProperties(label1)["ForeColor"].Attributes; 

//Find the "DefaultValue" attribute 
DefaultValueAttribute myAttribute = (DefaultValueAttribute)attributes[typeof(DefaultValueAttribute)]; 

デフォルト値の属性が存在しない以外(myAttributeがnull):私


はリフレクションを通じてFont財産のDefaultValue属性を取得を試してみましたAmbientValueという属性があることに気付きました。属性の値はコントロールの親から来ます。

制御に続き、control.Parentチェーンには、AmbientValueという属性タグがあり、すべてFormまでです。

  • LABEL1 [AmbientValue](なしのDefaultValue)
    • をForm1 [AmbientValue](なしのDefaultValue)
      • null

だから、どのように私は、コントロールのデフォルト値を得るのですかFontプロパティy?

+0

これを試しましたか?http://msdn.microsoft.com/en-us/library/system.windows.forms.control.defaultfont(v=VS.100).aspx? – kol

+0

可能な複製[WinFormsコントロールのプロパティが "デフォルト"の値であるかどうかを確認する方法](http://stackoverflow.com/questions/8251732/how-to-tell-if-a-winforms-controls-property- – LarsTech

+0

@LarsTechその質問は* any *プロパティを扱います。この質問は* just * 'Font'を扱っています。さらに、その質問のテクニックは 'Font'のために働くようには見えません。また、その質問はパイプの夢でした(*プロパティがデフォルト値になっているかどうかを知る方法?* - 方法がないようです)。より合理的なアプローチは、それぞれの**タイプ**のプロパティについて個別の質問をすることです。 –

答えて

2

私がWinFormsについて話しているのであれば、Control.DefaultFontプロパティが役立つはずだと思います。

+0

フォントは "デフォルト"でもなく " Control.DefaultFont'(つまり、フォームのフォントを "Comic Sans MS"に変更します。フォーム上のラベルは "Comic Sans MS"ですが、それでも "default") –

+0

@IanBoydこれは親をポーリングするAmbientValueですどのような "デフォルト"フォントにする必要があります。それは単なるシリアル化の問題です。デザイナーファイルを見て - フォームのフォント「Comic Sans MS」になりますが、ラベルにはフォントプロパティは表示されません。 – LarsTech

+0

@LarsTechしかし、私はまだ実行時にそれを把握する方法を見つけることができません。私は、内部的には、フォントが "ヌル"でなければならないと考えています(つまり、親から取得する)。しかし、私がプロパティを読んだとき、私は 'ヌル 'を見ません。 –

1

「default font」とは、継承されたアンビエントフォントではなく、直接割り当てられたフォントを意味します。

Controlクラスには、IsFontSetという内部メソッドがあります。 Fontがnullの場合はfalseを返します。

メソッド名が変更された場合、値がnullになるように、null可能なboolが使用されました。 try-catchは、戻り値の型がboolから何かに変更された場合にコードがクラッシュしないようにするために使用されます。

関連する問題