"PropertyGrid" - display Klasse-Mitglieder, die auch Klassen

Habe ich die Klasse PGMain als die SelectedObject in das "propertygrid":

         [DefaultPropertyAttribute("Basic")]
[Serializable]
public class PGMain
{    
    private TestClass m_TEST = new TestClass();
    [CategoryAttribute("TEST")]
    public TestClass TEST
    {
        get { return m_TEST; }
        set { m_TEST = value; }
}
    //More members are here
}

Nun möchte ich erweitern-die Mitglieder der Testklasse in das "PropertyGrid" - Steuerelement. Also ich habe Folgendes versucht:

   [Serializable]
[DescriptionAttribute("Expand to see the options for the application.")]
[TypeConverter(typeof(ExpandableObjectConverter))]
public class TestClass : ExpandableObjectConverter
{
    [CategoryAttribute("test-cat"), DescriptionAttribute("desc")]        
    public string Name = "";
    [CategoryAttribute("test-cat"), DescriptionAttribute("desc")]
    public object Value = null;
    [CategoryAttribute("test-cat"), DescriptionAttribute("desc")]
    public bool Include = true;

    public override bool CanConvertTo(ITypeDescriptorContext context, System.Type destinationType)
    {
        if (destinationType == typeof(TestClass))
            return true;

        return base.CanConvertTo(context, destinationType);
    }
}

Dem Ergebnis, dass es eine erweiterbare-Symbol vor der Testklasse in das "propertygrid" - es kann aber nicht erweitert werden. Was bin ich?
Nur um klar zu sein: ich kann zeigen, erweiterbar Mitglieder der PGMain Klasse, aber NICHT erweiterbar Mitglieder die Mitglieder des PGMain Klasse wie das Test-Mitglied in PGMain.


Edit:

Nein, ich habe 2 Klassen, die NICHT 1.

  [DefaultPropertyAttribute("Basic")]
[TypeConverter(typeof(ExpandableObjectConverter))]
public class fooA
{
    private fooB m_TestMember = new fooB();
    [Browsable(true)]
    [CategoryAttribute("Test category"), DescriptionAttribute("desctiption here")] //<<<<< this one works.
    [TypeConverter(typeof(fooB))]
    public fooB TestMember
    {
        get { return m_TestMember; }
        set { m_TestMember = value; }
    }

}

[DefaultPropertyAttribute("Basic")]
[TypeConverter(typeof(ExpandableObjectConverter))]
public class fooB
{
    private string m_ShowThisMemberInGrid = "it works"; //<<<<< this doesn NOT work
    [CategoryAttribute("Tile"), DescriptionAttribute("desctiption here")]
    public string ShowThisMemberInGrid
    {
        get { return m_ShowThisMemberInGrid; }
        set { m_ShowThisMemberInGrid = value; }
    }

    public override string ToString()
    {
        return "foo B";
    }
}

Aber ich habe das problem lösen (durch Zufall). Es scheint, dass die public-Variablen, die nicht in das "propertygrid" - Steuerelement. Es werden Eigenschaften mit Getter und setter. Das war die Lösung. Also das obige snippet das problem gelöst. Vielen Dank für Ihre Antworten sowieso :).

Sie müssen, um den vorgegebenen C# - Eigenschaften, nicht die Felder. Felder werden nicht gesehen, durch die Eigenschaft grid.

InformationsquelleAutor Napoleon | 2011-03-10

Schreibe einen Kommentar