アンビエントプロパティ(直訳して環境属性)と言っても、 何のことだか想像できないと思いますので、簡単な例で説明します。
まず、Windows.Forms アプリケーションを作って、 ボタンを1つツールボックスから追加してください。 次のような Windows.Forms ができたと思います。
次に、Form1 のプロパティ から BackColor プロパティで適当な色を指定します。 すると、次のように、Form と ボタンの両方の背景の色が変わった
Windows.Forms ができたと思います。
さて、ソースコードの InitializeComponent メソッドの中を確認してみてください。 次のようになっているはずです。
private void InitializeComponent()
{
this.button1 = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// button1
//
this.button1.Location = new System.Drawing.Point(64, 72);
this.button1.Name = "button1";
this.button1.TabIndex = 0;
this.button1.Text = "button1";
//
// Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 12);
this.BackColor = System.Drawing.Color.FromArgb(((System.Byte)(255)),
((System.Byte)(255)), ((System.Byte)(128)));
this.ClientSize = new System.Drawing.Size(292, 266);
this.Controls.AddRange(new System.Windows.Forms.Control[] {this.button1});
this.Name = "Form1";
this.Text = "Form1";
this.ResumeLayout(false);
}
このコードを見ると、ボタンの BackColor へ色を設定しているコードがありません。 にもかかわらず、ボタンの BackColor が変わるのは、 Form の親コントロールのプロパティを取得するという特殊な アンビエントプロパティであるからです。
Form コントロールでは、次の4つのアンビエントプロパティがサポートされています。
アンビエントプロパティ |
BackColor |
Cursor |
Font |
ForeColor | このアンビエントプロパティがないと、すべての部品の面倒を見ないといけないので、 大変厄介なことになります。 知らず知らずのうちに、このアンビエントプロパティの恩恵にあずかっているんですね。
それでは次に、先ほどの Form へ メインメニューをドラッグアンドドロップしてみてください。 メインメニューのバックカラーは変更されないですよね。 また、Form のフォントを変更しても、メインメニューのフォントは変更されません。 これは、メインメニューがアンビエントプロパティをサポートしていないためです。
注意: メインメニューのバックカラー、フォントを変更するには、 オーナー描画をするしかないようです。
注意:
コントロールに Parent がなく、プロパティが設定されていない場合は、 コントロールは Site プロパティを通してアンビエント プロパティの値を決定しようとします。 コントロールが配置されておらず、そのサイトがアンビエント プロパティをサポートしていない場合、 またはアンビエントプロパティが設定されていない場合には、コントロール独自の既定値を使用します。
|