2016-07-17 5 views
0

C# 속성 표를 사용하여 새 개체를 추가하고 특정 개체의 설정을 변경합니다. 구성 요소 모델을 사용하여 변수를 생성자에 전달하는 방법을 알아야합니다. 원인은 차트 개체의 초기 값을 올바르게 정의하는 데 매개 변수가 필요하기 때문입니다. 당신이 할 수있는 일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; 

    } 
} 

답변

0

당신이 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); 
    } 
} 
+0

'_baseprovider'는 정적이 아니거나 정적 생성자에서 설정하면 안됩니까? – pinkfloydx33

+0

@ pinkfloydx33 - 그냥 샘플이 아니십니까? –

+0

게시 주셔서 감사합니다. 이것이 도움이 될지 확실하지 않습니다. "TypeDescriptor.AddProvider"부분을 이해하지 못합니다. 내가해야 할 일은 Property 그리드가 새로운 Chart 객체를 생성 할 때 매개 변수를 Chart 클래스의 생성자에 전달하는 것입니다. – user1035217