Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 设计器重置属性值_.net_.net 2.0_Windows Forms Designer_Visual Studio Designer - Fatal编程技术网

.net 设计器重置属性值

.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

我在设置属性的默认值时遇到问题,每次修改表单时,VisualStudio 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设计器中且设计器已修改时,它(重新)设置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{...}} 
}