1

GUIプロジェクトで使用されるライブラリで定義されたクラス Foo があります。GUI プロジェクトでは、 の助けを借りて Foo のインスタンスをグラフィカルに編集できますSystem.Windows.Forms.PropertyGrid

クラス Foo のインスタンスをPropertyGrid快適に編集するには、たとえば Foo のプロパティにいくつかの属性を設定する必要がありますBrowsable

ただし、これらの属性を Foo に設定したくありません。これが含まれているライブラリには、コードで (GUI ではなく) Foo を使用するために必要なものだけが含まれている必要があるためです。

PropertyGridフレンドリーなバージョンの Fooを入手するにはどうすればよいですか?

私はすでにそれを継承して (FooDesignable という名前を付けて)、必要な属性でそのプロパティをシャドウイングしようとしました。ただし、Foo がライブラリ プロジェクトの他のカスタム クラスを使用していることを発見するまで、それはうまく機能しませんでした。その後、Foo の既存のプロパティをシャドウし、XxxDesignable 型を返すように変更する必要がありました。

私はここで行き止まりですか?それとも私が悪いことを考えているだけですか?

4

2 に答える 2

0

別の型を作成するのは正しい考えだと思いますが、FooDesignerから継承するのではなく、ラッパーにする必要がありますFoo。そうすれば、複雑なオブジェクトを独自のラッパー タイプでラップできます。ラップするクラスがたくさんある場合、これは面倒かもしれません。ラッパー クラスのスケルトンを生成するために、T4 テンプレートを参照することをお勧めします。次に例を示します。

class FooDesigner
{
     private Foo foo;

     public FooDesigner(Foo foo)
     {
         this.foo = foo;
     }

     public int Prop1 
     { 
         get { return foo.Prop1; } 
         set { foo.Prop1 = value; } 
     }

     public BarDesigner Bar { get { return new BarDesigner(foo.Bar); } }
}

class BarDesigner
{
     private Bar bar;
     public BarDesigner(Bar bar) 
     { 
         this.bar = bar;
     }

     public string Prop2 
     { 
         get { return bar.Prop2; } 
         set { bar.Prop2 = value; } 
     }
}
于 2013-09-26T16:26:18.040 に答える