"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 :).
InformationsquelleAutor Napoleon | 2011-03-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sorry, habe ich falsch interpretiert, die Frage zu stellen.
Finden Sie mehr details über diese links
Hoffe es hilft 🙂
UPDATE:
Kopierte ich den code aus hier
Und verändert wie dieses.
Und in der form habe ich etwas getan, wie
Und seine Arbeit für mich.
Bieten Durchsuchbare als falsch für Eigenschaften, die Sie nicht wollen, anzeigen in der Eigenschaft grid.
Vielen Dank für die Antworten.Ich habe schon gelesen das 2 von 3 links, aber keiner von Ihnen zeigt mir die Lösung für mein problem. Sie alle nutzen ein ausgewähltes Objekt enthält Elemente wie strings, booleans, integers, etc.. Aber nicht ein Objekt ausgewählt, das hat Klasse-Mitglieder oder-struct-Mitglieder, die erweitert werden können wie ein Rechteck. Ich weiß allerdings wissen, dass die Lösung liegt irgendwo in der "TestClass" und nicht in PGMain, weil die Rechteck-Mitglieder arbeiten.
InformationsquelleAutor Anuraj
Falsch:
Gut:
InformationsquelleAutor Napoleon