2012-04-04 4 views
1

私は基本クラスと派生クラス(後述)と単一のプロパティ "TestProperty"を持っています。私の目標は、私がintializecomponent内でシリアル化されるように、testpropertyで設定した値を取得することです。後の時点では、デザイン時にこのプロパティの新しい値にアクセスするためにベースクラスが必要で、その値がintializecomponentに設定されていなければ、この新しい "あなたがうまくいけば(私はデフォルト値の属性がこの場合には関連しているとは思わない)。initializeecomponentに書き込まれるプロパティを強制的に派生した派生クラス

以下のケースでは、デザイナで「派生」を開いてプロパティを新しい値に手動で設定すると、自分のプロパティをシリアル化する唯一の方法があります。

私はカスタムのコード化リライザが解決策になると懸念していますが、私はそれを避けるために非常に努力しています。私は "ベース"にできるだけ少ないコードを持たせたい。

デザイナーから編集して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」という名前のプロパティを編集するために使用されるカスタムのeditorcontrol biengがあることです。この場合、EditablePropertyはTestPropertyにアクセスする必要があります。実行時には、問題はありません。タイプとして導出され、問題はありません。

問題は、私が使用しているEditorControlが別のアセンブリにあり、それが何らかの理由で考えられているからです。派生したのコンストラクタ。

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

+0

自分で設定する場合は、その値をInitializeComponentに直接書き込む必要はありません。この新しい「デフォルト値」にアクセスすることはできませんが、実際にはDerived(他の形式を派生することを含む)の使用にはその値が含まれます。多分あなたが達成しようとしていることについてもっと説明できるなら、それはあなたに良い答えを与えるのに役立ちます。 –

+0

私は、うまくいけば私がしようとしていることを説明するために質問を編集しました。 – greggorob64

答えて

1

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

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

+0

もし私がそれをすることができたら私はそうするでしょう。エクササイズの全体的なポイントは、私がコードからやりたいことです。プロパティで設定しようとしている私は、* .settingsファイルから取得している派生を含むプロジェクトの。 – greggorob64

+0

さて、それは異なっています。デザイナーでフォームが選択された状態で、プロパティウィンドウを確認します。最初の行「(ApplicationSettings)」を参照してください。これを使用して、TestPropertyと設定の間のバインディングを作成できます。アプリケーション設定でない場合は、次の行「(DataBindings)」を使用してバインディングを作成できます(設定ファイルをラップする厳密な型クラスを参照するObjectデータソースを作成する必要があります)。 –

+0

私はそれを試してみるつもりですが、基本クラスとエディタクラスはアセンブリ "A"にあり、設定ファイルはアセンブリ "B"にあります。それが問題なのだろうか? – greggorob64

関連する問題