WinForms と ASP.NET の両方で使用する、純粋にグラフィカルなカスタム コントロールを開発したいとします。コントロールは、いくつかのプロパティ設定と関連するルールに基づいて、画像をレンダリングします。
明らかに、コードを WinForms バージョンから ASP.NET バージョンに複製することもできますが、それは、エラーが見つかった場合、またはルールが変更された場合、2 つのバージョンを更新する必要があることを意味します。
必要なさまざまなプロパティとルールを使用して、コア クラスを作成できます。WinForms および ASP.NET コントロール クラスには、このコア クラスを指すプロパティが次のように含まれます。
public class MyControlCore
{
// all properties and control rules
public void PaintTo(Graphics graphics)
{
// rendering of control
}
}
public class MyWinFormsControl: Control
{
public MyWinFormsControl(Control parent): base(parent)
{
CoreControl = new MyControlCore();
}
public MyControlCore CoreControl { get; private set; }
protected override OnPaint(object sender, PaintEventArgs e)
{
CoreControl.PaintTo(e.Graphics);
}
}
これは機能しますが、プロパティ グリッドではCoreControl
、カスタマイズ プロパティを含む property を取得します。サブ プロパティを持つプロパティMyControlCore
の代わりに、プロパティ グリッドにプロパティを表示する方法はありますか?CoreControl
関連するクラスでこれを達成できるTypeDescriptionProvider
のではないかと考えていましたが、どのように進めればよいのか、それが私が望んでいる結果をもたらすのかさえわかりません。これはデザイナーでのみ役立つことを理解していますが、それで問題ありません。