0

動的に読み込まれるクラスがあり、含まれるプロパティの数 (または種類) が事前にわかりません。通常のクラスを表示するように表示されるように、すべてのプロパティを PropertyGrid にロードしたいと思います。

たとえば、これが私のクラスの場合:

class TestPropertyObject
{
    [Category("Names")]
    [Description("Enter your name")]
    public string Name { get; set; }

    [Category("Numbers")]
    [Description("Enter your number")]
    public int Number { get; set; }
}

リフレクションを使用してオブジェクトを生成し、そのプロパティを取得します。

PropertyInfo[] info = obj.GetType().GetProperties()  

PropertyGrid にプロパティを表示するにはどうすればよいですか? 私はすでにこの記事http://www.codeproject.com/Articles/4448/Customized-display-of-collection-data-in-a-Propert
を何度も準備してい ます が、それを機能させることができないようです。

いくつかのガイダンスをいただければ幸いです。

ありがとう!

4

1 に答える 1

1

ここに解決策があります。必要なのはクラスのインスタンスだけです。

        var OptionsPropertyGrid = new PropertyGrid();
        OptionsPropertyGrid.Size = new Size(300, 250);

        this.Controls.Add(OptionsPropertyGrid);

        TestPropertyObject appset = new TestPropertyObject();
        OptionsPropertyGrid.SelectedObject = appset;

このサンプルは、クラスのプロパティがカテゴリ/説明で装飾されていることを前提としています。誤解している場合はお知らせください。

または動的オブジェクトを使用して

        var OptionsPropertyGrid = new PropertyGrid();
        OptionsPropertyGrid.Size = new Size(300, 250);

        this.Controls.Add(OptionsPropertyGrid);
        this.Text = "Options Dialog";
        string classname = "WindowsFormsApplication1.TestPropertyObject";
        var type1 = Type.GetType(classname);
        object obj = Activator.CreateInstance(type1);
        OptionsPropertyGrid.SelectedObject = obj;

クラスの名前空間を取得できることを確認してください。

于 2012-12-26T12:31:26.403 に答える