|
分類:[C#]
2013/11/16(Sat) 12:55:59 編集(投稿者)
お世話になります。 Buttonなどから派生したカスタムコントロールを作成し、プロパティをPropertyGridに表示しています。 プロパティにはデフォルト値を指定しているのですが、ファイル保存時にデフォルト値と異なる ものだけを保存するようにしたいです。
クラスの例です。 class ButtonEx : Button { [Browsable(true)] [DefaultValue(tool)] public bool visibleflg{省略}
[Browsable(true)] public Color outcolor{省略} public bool ShouldSerializeoutcolor() {return outforecolor != Color.FromArgb(0xff, 0x00, 0x00, 0x00);} }
保存対象はBrowsable=trueで値の変更したものだけ取得したいので、以下のようにしています。
//保存対象のプロパティを列挙し、文字列をかえす。 private string GetProps<T>(T SrcCtl) { //○Publicメンバを取得する MemberInfo[] members = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly); //○Browsable=Trueのメンバーのみコピーする。 for (int i = 0; i < members.Length; i++) { AttributeCollection attributes = TypeDescriptor.GetProperties(SrcCtl)[members[i].Name].Attributes; BrowsableAttribute myAttribute = (BrowsableAttribute)attributes[typeof(BrowsableAttribute)]; if (myAttribute.Browsable == true) { DefaultValueAttribute defAttribute = (DefaultValueAttribute)attributes[typeof(DefaultValueAttribute)]; if (defAttribute!=null && !defAttribute.IsDefaultAttribute()) //←ここの判定がまずい? { //ここに保存したいプロパティを連結した文字列を作成する処理をいれていきます。 Debug.Print(members[i].Name); }
上記で実行してみると、どうやらデフォルト値設定のあるもの全てが列挙されてしまいました。
デフォルト値から変更されているものを判定するにはどのようにすればよろしいでしょうか。
以上、よろしくお願いします。
|