0


0

デザイナーがプロパティ値をリセットする

プロパティのデフォルト値の設定に問題があります。これは、フォームが変更されるたびにVisual Studio Designerによって「更新」されます。

状況:

class MyHour {
    MyHour() {}
    MyHour(string h) {}
}

class MyPanel {
    _FirstHour = new FirstHour("13:00");

    [DefaultValue("13:00")]
    Hour FirstHour {get { return _FirstHour; } set{...}}
}

MyPanelがVS Designerにあり、Designerが変更されると、my(すでに事前に初期化された)を設定(再)します。

MyHour myHour1 = new MyHour();
...
myPanel1.FirstHour = myHour1;

私はそれがこれを設定したい(またはこのプロパティに触れないでください):

MyHour myHour1 = new MyHour("13:00");
...
myPanel1.FirstHour = myHour1;

2 Answer


4


私が質問を正しく理解している場合、VSデザイナーがそのプロパティを `DefaultValue`で設定したものに初期化しない理由を知りたいですか?

`DefaultValueAttribute`は実際にそのデフォルト値を_set_にせず、オブジェクトが通常初期化されるデフォルト値をデザイナーに通知するだけであるため、デザイナーは変更されたかどうか(つまり、 シリアル化する必要があり、プロパティグリッドに太字で表示する必要があるかどうか)。

実際にデフォルト値を設定するには、フィールドで初期化子を使用するか、デフォルト(パラメーターなし)コンストラクターで値を設定する必要があります。


0


「完全に満足した」ソリューションではない場合でも、これが解決策です。

class MyPanel {
    _FirstHour = new FirstHour("13:00");

    [DefaultValue("13:00"),
    DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
    Hour FirstHour {get { return _FirstHour; } set{...}}
}

Designerはもう「FirstHour」プロパティに触れません。