8

そのため、私が取り組んでいるこのプロジェクトでは、.NETPropertyGridコントロールを使用することにしました。propertygridには、ListViewコントロールでユーザーが選択したアイテムに基づいて、実行時に作成されるオブジェクトが入力されます。

したがって、「ベース」などのListViewの最初の項目を選択すると、PropertyGridは、そのコンポーネントの寸法などのプロパティを表示します。次に、「上」を選択すると、PropertyGridに色が表示されます。いずれにせよ、リスト内のすべてのアイテムは1つの「コンポーネント」オブジェクトです。

基本的に、ListViewアイテムが選択されると、ループはデータセットを反復処理して、選択されたコンポーネントオブジェクトに関連付けられているプロパティを見つけ、propertygridに表示されるpropertybagクラスにスローされます。

これらのコンポーネントとプロパティはすべて1つのクラスであるため、私が理解しようとしていることは、ドロップダウンメニュー、画像ボックス、またはテキストフィールドとして表示するプロパティを動的に決定する方法です。

Visual Studios 2010 / C#.NETを使用しており、動的プロパティの生成には、TonyAllowattがCodeProjectで見つけた明らかに人気のある「PropertyBag」クラスを使用しています。私が考えることができる唯一のことは、プロパティのデータベースに列を追加し、それを使用してPropertyBagに追加するデータ型を指示することです。これは人気のあるトピックのようですが、動的に構築されたオブジェクトと組み合わせてそれを行う方法を理解するのに苦労しています。

4

3 に答える 3

7

それ自体は答えではありませんが、私もそのような獣を作るために努力してきました。これがこのトピックに関するstackoverflowの最大のヒットです...

実行時にPropertyGridを変更する方法(プロパティと動的タイプ/列挙型を追加/削除)

プロパティグリッドに動的オブジェクトを表示するにはどうすればよいですか?

PropertyGridと動的タイプのオブジェクト

最初は、Expandoオブジェクトに基づく動的オブジェクトが実際に必要でしたが、私にとってはそうではないことがわかりました。その罠に陥らないように注意することをお勧めします。

私の場合、本当に必要だったのは、プロパティの可変セットを追加できるカスタムオブジェクトのコレクションでした。各プロパティは、3つのカスタムタイプ(stringType、rangeType、またはenumType)のいずれかのインスタンス化です。「動的」プロパティが任意のクラスタイプではないことに気付いた後、プロジェクトは3つのスタックオーバーフローの例で説明したコードを簡単にひねりました。実行時にPropertyGridを変更する方法(プロパティと動的タイプ/列挙型を追加/削除)という質問は、私が最終的に得たもののほぼ直接的な例です。

私のとりとめのない話があなたの道を見つけるのに役立つことを願っています...

于 2012-05-25T22:16:18.223 に答える