2016-07-17 13 views
0

Ich verwende das C# -Eigenschaftenraster, um neue Objekte hinzuzufügen und Einstellungen eines bestimmten Objekts zu ändern. Ich muss wissen, wie man eine a-Variable mithilfe des Komponentenmodells an den Konstruktor übergibt. Grund dafür ist, dass ein Parameter erforderlich ist, um die Anfangswerte des Diagrammobjekts korrekt zu definieren.C# Eigenschaft 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; 

    } 
} 

Antwort

0

Was Sie tun können, ist eine benutzerdefinierte TypeDescriptionProvider für den Diagrammtyp deklarieren, früh, bevor Sie Ihr Objekt in die Property wählen:

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

Und hier ist der Brauch Provider (Sie müssen Implementieren der CreateInstance-Methode):

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

Sollte '_baseprovider' nicht entweder statisch sein oder in einem statischen Konstruktor festgelegt sein? – pinkfloydx33

+0

@ pinkfloydx33 - warum nicht nur ein Beispiel –

+0

Danke für das Posten. Ich bin mir nicht sicher, ob das helfen wird. Ich verstehe den "TypeDescriptor.AddProvider" -Teil nicht. Alles, was ich tun muss, ist, einen Parameter an den Konstruktor der Diagrammklasse zu übergeben, wenn das Eigenschaftenraster ein neues Diagrammobjekt erstellt. – user1035217