3

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

そのため、デザイナーが立ち​​去って私を放っておくように、DefaultValue を設定する必要があります。

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

Size 構造体は定数ではないため、VB コンパイラは、Size は定数ではないため、Type Size の Property の DefaultValue として Size を設定できないと教えてくれます。

これは私の脳を傷つけます。

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

注意: 私は mySize を、Size プロパティ (150x150 の DefaultValue を持っているので、Sizes の DefaultValues を設定できるようです) をオーバーライドするためのある種の混乱した試みとして使用していません。mySize は、クラスが必要とするサイズの値です。

4

2 に答える 2

6

DefaultValue 属性を適用する代わりに、次の 2 つのメソッドを記述します。

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

ShouldSerializemySize では、値をコードにシリアル化する必要がある場合は true を返します。ResetmySize で、プロパティをデフォルト値にリセットします。

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

詳細はこちら: http://msdn.microsoft.com/en-us/library/53b8022e(VS.71).aspx

于 2009-05-01T09:11:40.863 に答える
1

DefaultValue の MSDN ページのコミュニティ コンテンツ セクションに、Size 型の defaultValue を設定するための具体的な例が実際にあることに気付きました。これは、このページで説明されている DefaultValue コンストラクターの使用を提案しています。

残念ながら、そこに示されている例は正しいですが、機能するという点では、MSDNのドキュメントが自然にこの答えにつながるとは思えません。

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

于 2009-05-01T09:26:50.593 に答える