- PR -

カスタムコントロールのプロパティに勝手に初期値が設定されてしまう。

1
投稿者投稿内容
まるひろ
会議室デビュー日: 2004/05/25
投稿数: 11
お住まい・勤務地: 東京
投稿日時: 2005-02-24 21:08
いつもお世話になっています。
VB.NETで開発をしているものです。

コントロールを継承したカスタムコントロールを作成していて、さらにColorクラスを受け渡しするオリジナルのプロパティ(MyColor(仮称))を追加しています。

で、このカスタムコントロールを実際にFormに貼り付けてみると、デザイナ自動生成のロジック(InitializeComponentメソッド)でMyColorプロパティに勝手に「Color.Empty」が設定されてしまうのです。

このMyColorプロパティにはカスタムコントロールのコンストラクタである色が設定してあるのにこの"Empty"で上書かれてしまうのです。

この勝手に書かれる
「Me.MyControl.MyColor = System.Drawing.Color.Empty」
というロジックが書かれないようにする方法はないのでしょうか?

デザイナのプロパティウィンドウからプロパティを変更すると、初期値以外の設定値にした場合だけInitializeComponentに書かれますよね。
あのあたりにヒントがあると思っているのですが...
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-02-24 21:14
こんにちは、じゃんぬねっと です。

DefaultValue 属性の設定はどうなんでしょうか?
_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
まるひろ
会議室デビュー日: 2004/05/25
投稿数: 11
お住まい・勤務地: 東京
投稿日時: 2005-02-24 21:21
早速のレス、ありがとうございます。じゃんぬねっとさん。

DefaultValue属性には何も設定していません。

"白"とか"黒"とか決まっているならば設定できると思うのですが、
カスタムコントロールで設定している色も実はapp.configから取得しているのです。

属性タグの中って変数的なものを設定することってできますか?

[ メッセージ編集済み 編集者: まるひろ 編集日時 2005-02-24 21:46 ]
ya
大ベテラン
会議室デビュー日: 2002/05/03
投稿数: 212
投稿日時: 2005-02-24 22:41
引用:

"白"とか"黒"とか決まっているならば設定できると思うのですが、
カスタムコントロールで設定している色も実はapp.configから取得しているのです。

属性タグの中って変数的なものを設定することってできますか?



動的な場合はShouldSerializeMyPropertyを使用します。こんな感じ。

コード:

private Color myProperty = SystemColors.Control;
[Browsable(true)]
public Color MyProperty {
 get { return this.myProperty; }
 set { this.myProperty = value; }
}

private bool ShouldSerializeMyProperty() {
 return this.MyProperty != SystemColors.Control;
}


まるひろ
会議室デビュー日: 2004/05/25
投稿数: 11
お住まい・勤務地: 東京
投稿日時: 2005-03-01 13:05
yaさん、ありがとうございます。
お返事が遅くなりました。

見事解決です。

ShouldSerialize〜〜〜っていうのは、
デザイナが自動生成コードを書く前にプロパティがデフォルト値と
一致するかの判定に用いるメソッドなんですね。

大変勉強になりました。
ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)