0

Component-model は、 PropertyDescriptor の ShouldSerializeValue メソッドを使用して、プロパティにデフォルト値があるかどうかを示していることを知っています。

基本の windows-formsクラスには、 ForeColor 、 BackColor 、 FontControlなどのいくつかのプロパティがあり、デフォルトで親と同じ値になりますが、これらのデフォルト値を提供するものは見つかりませんでした。Control クラスは ICustomTypeDescriptor を実装しておらず、TypeDescriptionProviderAttribute も持っていません。TypeDescriptorPropertyDescriptor

Control クラスは、これらのプロパティをシリアル化する必要があるかどうかをどのように示しますか? これらのプロパティの PropertyDescriptors はどこで提供されますか??

ありがとう!!!

4

1 に答える 1

2

デフォルト値はありません。これらのプロパティは「環境」プロパティです。Control クラスは、プロパティの割り当てが発生したことを検出します。それが起こらなかった場合は、親の対応するプロパティを使用します。これは、子コントロールがコンテナーと同じ色とフォントを使用することを保証します。

Control クラスには ShouldSerializeForeColor() メソッドがあります。これは内部的なものであり、ユーザー コードでオーバーライドすることはできません。他のプロパティについても同様です。Reflector または .NET Reference Source を参照してください。

MSDN ライブラリでは、次のように文書化されています。

Windows フォーム コントロールはアンビエント プロパティを使用するため、子コントロールは周囲の環境のように表示できます。アンビエント プロパティは、設定されていない場合、親コントロールから取得されるコントロール プロパティです。コントロールに Parent がなく、プロパティが設定されていない場合、コントロールは Site プロパティを通じてアンビエント プロパティの値を決定しようとします。コントロールが配置されていない場合、サイトがアンビエント プロパティをサポートしていない場合、またはプロパティが AmbientProperties で設定されていない場合、コントロールは独自の既定値を使用します。通常、アンビエント プロパティは、子コントロールに伝達される BackColor などのコントロールの特性を表します。たとえば、Button はデフォルトで親 Form と同じ BackColor を持ちます。

于 2010-04-01T17:42:13.663 に答える