2016-07-17 4 views
0

Я использую сетку свойств C# для добавления новых объектов и изменения настроек определенного объекта. Мне нужно знать, как передать переменную конструктору с помощью Component Model. Причина заключается в том, что для правильного определения начальных значений объекта диаграммы необходим параметр.C# Property Grid Pass Constructor Variable

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; 

    } 
} 

ответ

0

Что вы можете сделать, это объявить обычай TypeDescriptionProvider для типа диаграммы, в начале, прежде чем выбрать объект в PropertyGrid:

... 
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); 
    } 
} 
+0

Не следует ли '_baseprovider' либо статично, либо задаваться в статическом конструкторе? – pinkfloydx33

+0

@ pinkfloydx33 - почему бы и нет, это просто образец –

+0

Спасибо за сообщение. Я не уверен, что это поможет. Я не понимаю часть «TypeDescriptor.AddProvider». Все, что мне нужно сделать, это передать параметр конструктору Chart, когда сетка свойств создаст новый объект Chart. – user1035217