1

基本クラスと派生クラス (以下で説明)、および単一のプロパティ "TestProperty" があります。私の目標は、testproperty に設定した値を initializecomponent 内でシリアル化することです。後の時点で、設計時にこのプロパティの新しい値にアクセスできるように基本クラスが必要になり、その値が intializecomponent で設定されない限り、この新しい値にアクセスできないため、これは非常に重要です。"もしそうなら "デフォルト値" (ただし、この場合、defaultvalue 属性は関係ないと思います)。

以下の場合、プロパティをシリアル化する唯一の方法は、デザイナーで "派生" を開き、手動でプロパティを新しい値に設定することです。

カスタム codedomserializer が解決策になるのではないかと心配していますが、それを避けようとしています。「ベース」のコードはできるだけ少なくしたい。

プロパティ (コード内で取得できる場所に設定) を取得して、デザイナーから編集して initializecomponent に詰め込むにはどうすればよいですか?

public partial class Base : Form
   {
      public Base()
      {
         InitializeComponent();
         TestProperty = "set in the base class";
      }
      [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
      public string TestProperty
      {
         get;
         set;
      }
   }

そして単純な派生クラス

public partial class Derived : Base
   {
      public Derived()
      {
         InitializeComponent();
         this.TestProperty = "i want to be packed into initializecomponent somehow";
      }
   }

なぜ私がやっていることをやろうとしているのかについて、もう少し情報があります。

私の問題は、デザイナーで「派生」を開いたときに、「editableproperty」と呼ばれるプロパティを編集するために使用されるカスタムのエディター コントロール bieng があることです。この場合、EditableProperty は TestProperty にアクセスする必要があります。実行時には問題ありません。Derived に型として完全にアクセスでき、問題ありません。

問題は、私が使用している EditorControl が別のアセンブリにあり、(何らかの理由で、派生アセンブリとは異なるアセンブリにあるためだと思います)、派生のコンストラクターに設定した新しい値をロードしないことです。 .

基本的に、デザイナーで派生を開いてカスタムエディターを使用しようとすると、TestProperty の値として「基本クラスに設定」されます。エディター コントロールが値を認識できるようにするには、initializecomponent に TestProperty を設定する必要があります。

4

1 に答える 1

1

フォームデザイナはDerivedのインスタンスを作成していません。Baseのインスタンスを作成し、DerivedからInitializeComponentメソッドを呼び出します。そのため、設定しているプロパティの新しい値はデザイナーによって取得されません。

コンストラクターで設定するのではなく、Derivedのデザイナーでプロパティの値を設定するだけです。これにより、InitializeComponentのプロパティの新しい値が保持され、デザイン時に表示されます。

于 2012-04-04T16:04:36.607 に答える