使用 Reset 和 ShouldSerialize 控制属性(Windows 窗体 .NET)
本文介绍如何创建 Reset<PropertyName>
和 ShouldSerialize<PropertyName>
方法来管理 Visual Studio 中“属性”窗口的属性。 如果属性没有简单的默认值,Reset
和 ShouldSerialize
是可以为属性提供的可选方法。 如果属性有一个简单的默认值,则应改为应用 DefaultValueAttribute,并将默认值提供给属性类构造函数。 这两种机制都支持设计器中的以下功能:
- 如果已将属性的值修改为非默认值,则该属性会在属性浏览器中提供视觉指示。
- 用户可以右键单击该属性,然后选择“重置”,将属性还原为其默认值。
- 设计器生成更高效的代码。
有关属性的详细信息,请参阅“Reset 和 ShouldSerialize”。
支持代码
本文通过创建指南针玫瑰控件来演示 Reset
和 ShouldSerialize
方法。 如果使用的是自己的用户控件,则可以跳过本部分。
将以下枚举添加到代码:
public enum Directions { None, North, NorthEast, East, SouthEast, South, SouthWest, West, NorthWest, }
Public Enum Directions None North NorthEast East SouthEast South SouthWest West NorthWest End Enum
添加名为
CompassRose
的用户控件。将类型
Directions
名为Direction
的属性添加到用户控件。public Directions Direction { get; set; } = Directions.None;
Public Property Direction As Directions = Directions.None
重置
Reset<PropertyName>
方法会将相应的 <PropertyName>
属性重置为其默认值。
以下代码会将 Direction
属性重置为 None
,该属性被视为指南针玫瑰控件的默认值:
private void ResetDirection() =>
Direction = Directions.None;
Private Sub ResetDirection()
Direction = Directions.None
End Sub
ShouldSerialize
ShouldSerialize<PropertyName>
方法会返回一个布尔值,该值指示支持属性是否已从其默认值更改,并且应序列化为设计器的代码。
当 Direction
属性不等于 None
时,以下代码会返回 true,指示已选择方向:
private bool ShouldSerializeDirection() =>
Direction != Directions.None;
Private Function ShouldSerializeDirection() As Boolean
Return Direction <> Directions.None
End Function
示例
以下代码显示了 Direction
属性的 Reset
和 ShouldSerialize
方法:
public partial class CompassRose : UserControl
{
public Directions Direction { get; set; } = Directions.None;
public CompassRose() =>
InitializeComponent();
private void ResetDirection() =>
Direction = Directions.None;
private bool ShouldSerializeDirection() =>
Direction != Directions.None;
}
Public Class CompassRose
Public Property Direction As Directions = Directions.None
Private Sub ResetDirection()
Direction = Directions.None
End Sub
Private Function ShouldSerializeDirection() As Boolean
Return Direction <> Directions.None
End Function
End Class