属性默认值不适用于新控件

时间:2015-05-13 23:24:07

标签: vb.net

我有一个自定义用户控件,可以展开和折叠。我必须有第二个“开放宽度”属性,必须与普通宽度属性分开设置。

当我折叠控件时,它会使宽度为10.当我展开控件时,它会将控件宽度返回到“open width”属性,该属性必须在创建控件时手动设置为正常宽度

控件的默认新宽度为200,因此为了保持一致性,我还想将默认的“open width”属性设置为200。所以我有以下内容:

Private _mSideBarOpenWidth As Integer
<EditorBrowsable(EditorBrowsableState.Always)>
<Browsable(True)>
<DesignerSerializationVisibility( _
DesignerSerializationVisibility.Visible)>
<DefaultValue(200)>
<Category("SideBar")>
<Description("Sets the open Width of the SideBar control.")>
Public Property SideBarOpenWidth() As Integer
    Get
        Return _mSideBarOpenWidth
    End Get
    Set(value As Integer)
        _mSideBarOpenWidth = value
    End Set
End Property

当我将新控件拖到窗体上时,默认值始终为0.如果我更改它,值仍然存在,它不会从200开始。我已经在这个问题上做了很多搜索而且我有尝试了以下内容:

cleaning/building/rebuilding the project
closing VisualStudio and opening it back up
deleting the form and creating a new one
using the control in a new project
setting <em>DesignerSerializationVisibility.Visible</em> to <em>.Content</em>
using <em>"200"</em> with the quotes as the default value

所有这些的各种组合。这些都不起作用,拖到表单上的新控件的默认值变为零。毋庸置疑,为什么在创建默认值时不会将其设置为200,我感到很遗憾。

我唯一一次访问该属性的时候是我设置控件的宽度 Me.Width = SideBarOpenWidth

1 个答案:

答案 0 :(得分:2)

它不会以200

开始

这不是DefaultValue所做的。 VS使用DefaultValue来确定当前值是否与默认值不同,因此应该序列化并在Property IDE中以Bold显示属性值。它没有设置值。来自MSDN的评论:

  

DefaultValueAttribute不会导致使用属性的值自动初始化成员。您必须在代码中设置初始值。

Attribute提供关于类,属性等的信息。您的属性不知道DefaultValue属性,如果没有您添加的代码,它们就不会进行交互。

相反,它们将有关类或属性(等)的信息指定给其他事物(设计者,序列化器等)。例如,要使用EditorTypeConverter。一个很好的例子是DescriptionCategory属性 - 它们向VS提供了有关属性的信息,它在IDE的“属性”窗格中使用它。