1

コードを変更できない次のようなクラスがある場合、s1実行時に EditorAttribute を追加するにはどうすればよいですか?

class TestClass 
{ 
    public String s1 {get;set;} 
    public String s2 {get;set;} 
} 

この方法を試してみましたが、EditorAttribute エディターも追加されますが、それは望ましくs2ありません。

TypeDescriptor.AddAttributes(
     typeof(String),
     new EditorAttribute ( 
          typeof(MyUITypeEditor),
          typeof(UITypeEditor)));

これどうやってするの?

4

1 に答える 1

0

CustomTypeDescriptorを使用してクラスに独自の型記述子を実装し、 GetPropertiesメソッドをオーバーライドしてプロパティ記述子のカスタム セットを返すことができます。これにより、任意のプロパティに任意のカスタム属性を追加する機会が得られます。

このカスタム型記述子を取得したら、そのクラスのインスタンス (クラスのインスタンスをラップできるTestClass) を PropertyGrid コントロールにバインドできます。

次のようなもの:

public class TestClassTypeDescriptor : ICustomTypeDescriptor
{
   private TestClass mInst;

   public TestClassTypeDescriptor(TestClass inst)
   {
     mInst = inst;
   }

   //Implement ICustomTypeDescriptor
}


PropGridControl.SelectedObject = new TestClassTypeDescriptor(new TestClass());

PropertyDescriptorおよびPropertyDescriptorCollectionの独自の派生バージョンを作成する必要がある場合がありますが、これらは実装が非常に簡単です。

于 2012-03-11T22:18:19.560 に答える