Дизайнер сбрасывает значение свойства - PullRequest
0 голосов
/ 10 февраля 2010

У меня проблема с установкой значения по умолчанию для свойства, которое «обновляется» 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 изменен, он (повторно) устанавливает мое (уже предварительно инициализированное):

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

Я хочу, чтобы он устанавливал это (или просто не трогал это свойство):

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

Ответы [ 2 ]

4 голосов
/ 10 февраля 2010

Если я правильно понимаю вопрос, вы хотите знать, почему конструктор VS не инициализирует это свойство тем, что вы установили с помощью DefaultValue?

DefaultValueAttribute на самом деле не означает, что это значение по умолчанию равно set , оно просто информирует разработчика о значении по умолчанию, с которым обычно инициализируется объект, так, чтобы дизайнер знал, является ли оно был изменен (т. е. должен ли он быть сериализован и должен ли он отображаться жирным шрифтом в сетке свойств).

Чтобы фактически установить значение по умолчанию, вам нужно использовать инициализатор в поле или установить значение в конструкторе по умолчанию (без параметров).

0 голосов
/ 11 февраля 2010

Даже если это не «полностью удовлетворенное» решение, это единственное:

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

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

Конструктор больше не трогает FirstHour свойство.

...