0

C# プロパティ グリッドを使用して、新しいオブジェクトを追加し、特定のオブジェクトの設定を変更しています。コンポーネント モデルを使用してコンストラクターに変数を渡す方法を知る必要があります。その理由は、チャート オブジェクトの初期値を正しく定義するためにパラメーターが必要だからです。

List<Chart> charts = new List<Chart>();
[Description("Charts")]
[Category("4. Collection Charts")]
[DisplayName("Charts")]
public List<Chart> _charts
{
    get { return charts; }
    set { charts = value ; }
}




public class Chart
{
    public static string collectionName = "";

     int chartPosition = GetMaxChartIndex(collectionName);
     [Description("Chart posiion in document")]
     [Category("Control Chart Settings")]
     [DisplayName("Chart Position")]
     public int _chartPosition
     {
         get { return chartPosition; }
         set { chartPosition = value; }
     }


    public Chart(string _collectionName)
    {
        collectionName = _collectionName;

    }
}
4

1 に答える 1

1

できることは、オブジェクトを PropertyGrid に選択する前に、チャート タイプのカスタムTypeDescriptionProviderを宣言することです。

...
TypeDescriptor.AddProvider(new ChartDescriptionProvider(), typeof(Chart));
...

カスタム プロバイダーは次のとおりです (CreateInstance メソッドを実装する必要があります)。

public class ChartDescriptionProvider : TypeDescriptionProvider
{
    private static TypeDescriptionProvider _baseProvider = TypeDescriptor.GetProvider(typeof(Chart));

    public override object CreateInstance(IServiceProvider provider, Type objectType, Type[] argTypes, object[] args)
    {
        // TODO: implement this
        return new Chart(...);
    }

    public override IDictionary GetCache(object instance)
    {
        return _baseProvider.GetCache(instance);
    }

    public override ICustomTypeDescriptor GetExtendedTypeDescriptor(object instance)
    {
        return _baseProvider.GetExtendedTypeDescriptor(instance);
    }

    public override string GetFullComponentName(object component)
    {
        return _baseProvider.GetFullComponentName(component);
    }

    public override Type GetReflectionType(Type objectType, object instance)
    {
        return _baseProvider.GetReflectionType(objectType, instance);
    }

    public override Type GetRuntimeType(Type reflectionType)
    {
        return _baseProvider.GetRuntimeType(reflectionType);
    }

    public override ICustomTypeDescriptor GetTypeDescriptor(Type objectType, object instance)
    {
        return _baseProvider.GetTypeDescriptor(objectType, instance);
    }

    public override bool IsSupportedType(Type type)
    {
        return _baseProvider.IsSupportedType(type);
    }
}
于 2016-07-17T08:42:58.777 に答える