我有一个自定义用户控件,可以展开和折叠。我必须有第二个“开放宽度”属性,必须与普通宽度属性分开设置。
当我折叠控件时,它会使宽度为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
答案 0 :(得分:2)
它不会以200
开始这不是DefaultValue
所做的。 VS使用DefaultValue
来确定当前值是否与默认值不同,因此应该序列化并在Property IDE中以Bold显示属性值。它没有设置值。来自MSDN的评论:
DefaultValueAttribute不会导致使用属性的值自动初始化成员。您必须在代码中设置初始值。
Attribute
提供关于类,属性等的信息。您的属性不知道DefaultValue
属性,如果没有您添加的代码,它们就不会进行交互。
相反,它们将有关类或属性(等)的信息指定给其他事物(设计者,序列化器等)。例如,要使用Editor
或TypeConverter
。一个很好的例子是Description
或Category
属性 - 它们向VS提供了有关属性的信息,它在IDE的“属性”窗格中使用它。