- 題名: Colorプロパティのデフォルト値の簡単な指定方法発見
- URL: http://d.hatena.ne.jp/siokoshou/
- 日時: 2005/03/12 19:14:36
- ID: 9759
- この記事の返信元:
- (なし)
- この記事への返信:
- [9762] Re[1]: Colorプロパティのデフォルト値の簡単な指定方法発見2005/03/13 3:12:28
- ツリーを表示
補足) ●DefaultValueはShouldSerializeより先に検索されるようです。 ところで、 ●DefaultValue(type,string)は、使用したいクラスのための、 stringとの型コンバータが実装されている必要があります。 ので、自作クラス(やサードパーティ製クラス)の場合、注意が必要です。 実装すればいろんな場面で便利でしょうけど、 私は、 ○いちいち自分のクラス用にコンバータを作るのが面倒な上、 ○作るとしても、メンバフィールドが色々あるクラスの場合にstringとの 型コンバータを書こうとする時に一体どこまで必要なんだ?とかふと思ってしまったり、 ○stringで渡す範囲決めたとして代表的な形態のためだけに型コンバータクラスわざわざ作って 区別しても他の場合結局ShouldSerialize使うし、とか思ったり、 ○それに何かstring渡しの初期化はいっぱい散らばってると汚いし、 ○何より、実行してみないと記述がほんとにあってるかわかんない!し、 で、 ShouldSerializeに逃げています・・・。 コード記述中にすぐ間違いが分かるのは大きいですよね。 Colorのデフォルト値に「ラベンダー」とかセットしようとすると、 何か高確率で間違いそうですよね。(私だけ?) 私の中の基準では、 単純型の場合DefaultValueで、 複雑な型(参照型だけでなく構造体も)の場合はShouldSerializeで、 とか何となく決めてますが、皆さんは、型コンバータを作っていますか?
> DefaultValueはShouldSerializeより先に検索されるようです。 ちょっとマニュアル調べてみたところ・・・ すみません、何かと記憶違いしていたようです。 PropertyDescriptor.ShouldSerializeValueの「解説」辺りが、私の頭の誤動作の原因かと・・・。 で、ですが、 ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.1041/cpguide/html/cpconshouldpersistresetmethods.htm に、 「DefaultValueAttribute を適用するか、または ResetPropertyName メソッドと ShouldSerializePropertyName メソッドを指定します。 この 2 種類の操作を同時に実行しないでください。」 とありますから、両方書いてはいけないようです・・・。 どちらかにしてください。 (というか、プロパティの既定値を簡単に設定できる場合はDefaultValueAttribute、 できない場合は代わりにShouldSerializeとResetを実装するように、ということになるかと。) > 属性のところでインテリセンスが効かないのは不便ですよね。 文字列リテラルの中身部分だから仕方ないかと・・・。
分類:[.NET]
はじめまして!どぼんさんのサイトでいつも勉強させていただいております。
分かりやすく大変ためになるので、とても助かっております。
Colorプロパティのデフォルト値の指定方法で、簡単な方法を見つけましたので書き込みます。
http://dobon.net/vb/dotnet/control/propertygrid.html
↑では、ShouldSerialize を使っていますが、もっと簡単な方法を見つけました。
http://www.orthogonal.com.au/hobby/computers/blog/0100.htm
こちらで見つけたんですが、属性を使って
[DefaultValue(typeof(Color),"Pink")]
のように書けるそうです。
「DefaultValue( typeof(Color), "68, 86, 136" )」のような指定もできました。
FontやSizeも同様にできました。
[DefaultValue( typeof(Font), "MS Pゴシック, 9pt" )]
[DefaultValue( typeof(Size), "6, 6" )]
のように書けます。
.NET1.1 C#で確認済みです。