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;
4

2 に答える 2

4

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

DefaultValueAttribute実際にそのデフォルト値を設定するのではなく、オブジェクトが通常初期化されるデフォルト値について設計者に通知するだけで、設計者はオブジェクトが変更されているかどうか (つまり、変更する必要があるかどうか) を知ることができます。シリアル化され、プロパティ グリッドで太字で表示されます)。

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

于 2010-02-10T18:26:59.247 に答える
0

「完全に満足した」解決策ではない場合でも、これは次のとおりです。

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

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

FirstHourデザイナーはもうプロパティに触れません。

于 2010-02-11T10:44:07.313 に答える