.net 设计器重置属性值
我在设置属性的默认值时遇到问题,每次修改表单时,VisualStudio Designer都会“更新”该属性 情况:.net 设计器重置属性值,.net,.net-2.0,windows-forms-designer,visual-studio-designer,.net,.net 2.0,Windows Forms Designer,Visual Studio Designer,我在设置属性的默认值时遇到问题,每次修改表单时,VisualStudio Designer都会“更新”该属性 情况: class MyHour { MyHour() {} MyHour(string h) {} } class MyPanel { _FirstHour = new FirstHour("13:00"); [DefaultValue("13:00")] Hour FirstHour {get { return _FirstHour
class MyHour {
MyHour() {}
MyHour(string h) {}
}
class MyPanel {
_FirstHour = new FirstHour("13:00");
[DefaultValue("13:00")]
Hour FirstHour {get { return _FirstHour; } set{...}}
}
当MyPanel位于VS设计器中且设计器已修改时,它(重新)设置my(已预初始化):
我希望它设置此属性(或只是不接触此属性):
如果我正确理解了这个问题,您想知道为什么VS设计器没有将该属性初始化为您用
DefaultValue
设置的属性
DefaultValueAttribute
实际上并不会导致设置默认值,它只是通知设计器对象通常使用的默认值,以便设计器知道对象是否已被修改(即是否需要序列化并在属性网格中显示为粗体)
要实际设置默认值,您需要在字段上使用初始值设定项或在默认(无参数)构造函数中设置值。如果我正确理解了这个问题,您想知道为什么VS设计器没有将该属性初始化为您使用
默认值设置的属性
DefaultValueAttribute
实际上并不会导致设置默认值,它只是通知设计器对象通常使用的默认值,以便设计器知道对象是否已被修改(即是否需要序列化并在属性网格中显示为粗体)
要实际设置默认值,您需要在字段上使用初始值设定项或在默认(无参数)构造函数中设置值。即使不是“完全满意”的解决方案,这是一个:
class MyPanel {
_FirstHour = new FirstHour("13:00");
[DefaultValue("13:00"),
DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
Hour FirstHour {get { return _FirstHour; } set{...}}
}
设计师不再接触FirstHour属性。即使不是“完全满意”的解决方案,这是一个:
class MyPanel {
_FirstHour = new FirstHour("13:00");
[DefaultValue("13:00"),
DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
Hour FirstHour {get { return _FirstHour; } set{...}}
}
设计器不再触摸FirstHour
属性。是的,我也从MSDN中看到:“成员的默认值通常是其初始值。可视化设计器可以使用默认值重置成员的值。代码生成器也可以使用默认值来确定是否应为成员生成代码。”最后,“DefaultValueAttribute不会导致成员自动初始化为该属性的值。您必须在代码中设置初始值。”我进行了设置,但设计者将其重置回来。“初始值设定项”是什么意思?@serhio:field初始值设定项将字段声明为private string hour=“13:00”
。最后一部分是初始值设定项。如果您不能这样做(即,您使用的是自动属性),那么您必须在构造函数中初始化它。我已经在MyObj中进行了初始化。我会更新代码。我进行了初始化,但designer用一个新的(空的)小时“更新”了我的初始化小时。@serhio:您更新的问题发生了重大变化。不能简单地将字符串设置为类的默认值。您需要实现一个类型转换器,然后使用[DefaultValue(“13:00”,typeof(Hour))]
初始化默认值。请看这里:是的,我也从MSDN中看到:“成员的默认值通常是其初始值。可视化设计器可以使用默认值重置成员的值。代码生成器也可以使用默认值确定是否应为成员生成代码。”最后“DefaultValueAttribute不会导致成员自动初始化为该属性的值。必须在代码中设置初始值。“我设置了,但设计者重新设置了它。你说的“初始值设定项”是什么意思?@serhio:A字段初始值设定项将字段声明为private string hour=“13:00”
。最后一部分是初始值设定项。如果你不能这样做(即,你正在使用自动属性)然后你必须在构造函数中初始化它。我已经在MyObj中进行了初始化。我将更新代码。我进行了初始化,但是设计器用一个新的(空)值“更新”了我的初始化时间一个。@serhio:您更新的问题已发生重大变化。您不能简单地将字符串设置为类的默认值。您需要实现一个类型转换器,然后使用[DefaultValue(“13:00”,typeof(Hour))]
初始化默认值。请参阅此处:
class MyPanel {
_FirstHour = new FirstHour("13:00");
[DefaultValue("13:00"),
DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
Hour FirstHour {get { return _FirstHour; } set{...}}
}