2009-05-01 10 views
3

サイズ構造体を返す "mySize"プロパティを持つWindows.Formsコンポーネントがあります。 mySizeが明示的に設定されていない限り、コンポーネントのサイズに基づいて返されるmySizeを自動的に計算することを意図していました。この場合、mySizeの設定値が返されます。 残念ながら、フォームにコンポーネントを埋め込むようになったので、Windowsフォームデザイナーは明示的にmySizeプロパティの値を生成して設定することにしました。非定数型のプロパティのDefaultValueを設定しますか?

私はDefaultValueを設定する必要があります。そうすれば、デザイナーは私を離れることになります。

私はSystem.ComponentModel.DefaultValueを扱う答えを読んだので、コンストラクタのプロパティの値を手動で設定する必要があることを知っていますが、私が見つけた回答とドキュメントはDefaultValue偽の、定数の。

サイズ構造体が定数ではないため、サイズが定数ではないため、型サイズのプロパティのDefaultValueとしてSizeを設定できないことをVBコンパイラが警告しています。

これは私の脳を傷つける。

プロパティを使用する代わりにgetMySizeメソッドとsetMySizeメソッドを作成することで問題を回避できますが、実際にはSizeのデフォルトプロパティを設定する方法があるかどうかを知りたいと思います。

NB:mySizeを使用して、Sizeプロパティ(DefaultValueが150x150であるため、SOMETHINGがSizesのDefaultValuesを設定できるように思われる)を無効にしようとしました。 mySizeはクラスによって必要とされるちょうどあるサイズ値です。

答えて

5

代わりのDefaultValue属性を適用するには、次の2つのメソッドを記述します。値がコードにシリアル化する必要がある場合ShouldSerializemySizeで

bool ShouldSerializemySize() { ... } 
void ResetmySize() { ... } 

は、trueを返します。 ResetmySizeで、プロパティをデフォルト値にリセットします。

コンポーネントデザイナーは、リフレクションによってこれらのメソッドを自動的に選択します。ここ

さらに詳しい情報: http://msdn.microsoft.com/en-us/library/53b8022e(VS.71).aspx

+1

脇に:XmlSerializerはShouldSerialize *も使用しますが、公開されている場合にのみ使用します。 –

0

私はthis pageに説明したのDefaultValueコンストラクタを使用することを提案DefaultValue's MSDN pageのコミュニティコンテンツセクション、タイプサイズのはdefaultValueを設定するために与えられた具体的な例としては、実際にそこだと気づきました。

残念なことに、そこに与えられた例は正しかったが、動作するという点では、MSDNのドキュメントでは誰もこの答えにつながっていないようだ。

私はアルバハリの答えをこの質問の答えに設定するつもりです(彼の答えは少なくとも何らかの意味があるからです)。この例を完全に残しておきます。

関連する問題