DOBON.NETプログラミング掲示板過去ログ
InitializeComponentについて
題名: InitializeComponentについて
著者: JUNJUN
日時: 2004/12/19 19:07:02
ID: 8097
この記事の返信元:
(なし)
この記事への返信:
[8151]
Re[1]: InitializeComponentについて
えムナウ
2004/12/22 12:19:10
ツリーを表示
環境/言語:[環境(WindowsXP)、使用言語(VB.net)]
分類:[.NET]
お世話になります。
FormやUserControlなどでコンポーネントの初期化を行うInitializeComponentについての質問です。
ユーザーコントロールを作成し(以下、UC01とします)、BackColorを赤に設定しました。
このUC01のInitializeComponentには
Me.BackColor = System.Drawing.Color.Red
という設定情報が記述されます。
次にUC01を継承したユーザーコントロールを作成ます(以下、UC02とします)。
すると、UC02のInitializeComponentには
Me.BackColor = System.Drawing.Color.Red
という設定情報は記述されていません。
UC01ではBackColorは変更された値として扱われていますが、UC02では初期値として扱われているようです。
これは継承の特性の一つである、カプセル化が行われている為だと思います。
ここで、UC02を新しくフォーム(以下、Form1とします)に貼り付けました。(貼り付けたUC02をUC021とします。)
すると、Form1のInitializeComponentには
Me.UC021.BackColor = System.Drawing.Color.Red
と記述されています。
これはどういう事でしょうか?
UC02ではカプセル化され、初期値として扱われていたBackColorプロパティがForm1に貼り付けると、
変更された値としてInitializeComponentに記述されているわけです。
Form1のInitializeComponentに記述されてしまうと、UC01のBackColorを青に変えた場合でもForm1のInitializeComponentには
Me.BackColor = System.Drawing.Color.Red
という情報が残ります。
UC01のBackColorが変更されると、Form1でUC021のBackColorプロパティを変更していない限り、変更が反映されてほしいものです。
なぜこのようになるのか?
また、貼り付けた場合にInitializeComponentに記述されるのを防ぐ為にはどうしたらいいのか?
ご存知の方がいらっしゃいましたら御教授願えないでしょうか?
以上、宜しくお願いいたします。
題名: Re[1]: InitializeComponentについて
著者: えムナウ
URL:
http://www.geocities.jp/mnow/
日時: 2004/12/22 12:19:10
ID: 8151
この記事の返信元:
[8097]
InitializeComponentについて
JUNJUN
2004/12/19 19:07:02
この記事への返信:
(なし)
ツリーを表示
■No8097に返信(JUNJUNさんの記事)
> このUC01のInitializeComponentには
> Me.BackColor = System.Drawing.Color.Red
> という設定情報が記述されます。
UserControlのBackColor の DefaultValue ではないので付きますね。
> すると、UC02のInitializeComponentには
> Me.BackColor = System.Drawing.Color.Red
> という設定情報は記述されていません。
UC01で設定されているのでここでは付きません。
> ここで、UC02を新しくフォーム(以下、Form1とします)に貼り付けました。(貼り付けたUC02をUC021とします。)
> すると、Form1のInitializeComponentには
> Me.UC021.BackColor = System.Drawing.Color.Red
> と記述されています。
UC01とUC02の BackColor の DefaultValue ではないので付きますね。
> これはどういう事でしょうか?
DefaultValueAttribute クラスのヘルプを参照して考えてください。
> Form1のInitializeComponentに記述されてしまうと、UC01のBackColorを青に変えた場合でもForm1のInitializeComponentには
> Me.BackColor = System.Drawing.Color.Red
> という情報が残ります。
一度 DefaultValue ではない値で貼り付けたら引き続きそうなります。
> UC01のBackColorが変更されると、Form1でUC021のBackColorプロパティを変更していない限り、変更が反映されてほしいものです。
> なぜこのようになるのか?
> また、貼り付けた場合にInitializeComponentに記述されるのを防ぐ為にはどうしたらいいのか?
> ご存知の方がいらっしゃいましたら御教授願えないでしょうか?
UC01 に以下のような感じで DefaultValueAttribute を付けたらどうですか?
[DefaultValue(typeof(Color), "Red")]
public override System.Drawing.Color BackColor
{
get
{
return base.BackColor ;
}
set
{
base.BackColor = value ;
Invalidate();
}
}
DOBON.NET
|
プログラミング道
|
プログラミング掲示板
分類:[.NET]
お世話になります。
FormやUserControlなどでコンポーネントの初期化を行うInitializeComponentについての質問です。
ユーザーコントロールを作成し(以下、UC01とします)、BackColorを赤に設定しました。
このUC01のInitializeComponentには
Me.BackColor = System.Drawing.Color.Red
という設定情報が記述されます。
次にUC01を継承したユーザーコントロールを作成ます(以下、UC02とします)。
すると、UC02のInitializeComponentには
Me.BackColor = System.Drawing.Color.Red
という設定情報は記述されていません。
UC01ではBackColorは変更された値として扱われていますが、UC02では初期値として扱われているようです。
これは継承の特性の一つである、カプセル化が行われている為だと思います。
ここで、UC02を新しくフォーム(以下、Form1とします)に貼り付けました。(貼り付けたUC02をUC021とします。)
すると、Form1のInitializeComponentには
Me.UC021.BackColor = System.Drawing.Color.Red
と記述されています。
これはどういう事でしょうか?
UC02ではカプセル化され、初期値として扱われていたBackColorプロパティがForm1に貼り付けると、
変更された値としてInitializeComponentに記述されているわけです。
Form1のInitializeComponentに記述されてしまうと、UC01のBackColorを青に変えた場合でもForm1のInitializeComponentには
Me.BackColor = System.Drawing.Color.Red
という情報が残ります。
UC01のBackColorが変更されると、Form1でUC021のBackColorプロパティを変更していない限り、変更が反映されてほしいものです。
なぜこのようになるのか?
また、貼り付けた場合にInitializeComponentに記述されるのを防ぐ為にはどうしたらいいのか?
ご存知の方がいらっしゃいましたら御教授願えないでしょうか?
以上、宜しくお願いいたします。