VS自带的控件大多数据,属性都是有默认值的. 这是怎么实现的. (有人说: 给字段设个初始值呗!)
疑点一: 默认值与初始值是等同的吗? 好像是哦?
VS中的默认值与初始值是等同的吗? 不知道? (实际上是不等同的.)
从MSDN上可以查到,简单属性与复杂属性的默认值设置又是不一样的.
属性的初始值与默认值不是一个概念, 大家可以很容易地看出来.
1, 初始值就是当控件第一次被拖到窗体上属性中的值. 对于简单的类型比如int类型, 初始值默认为0, 这是控件类被实例化时分配的.
2, 默认值是当属性值不为粗体时的那个值就是该属性的默认值.
来段代码先, (下面是综合了前几篇文章中所提及的代码) 只包含两个属性的控件,一个简单属性,一个简单属性
1
using System.ComponentModel;
2
using System.Windows.Forms;
3
using System.Drawing;
4![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
5
namespace CustomControlSample
6
{
7
public class CustomControl : Control
8
{
9
// 注意:这里设置了简单属性的初始值123
10
private int simpleField = 123;
11![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
12
[Category("我是属性,我怕谁!")]
13
[Description("我是属性,故我在(属性浏览器中)!")]
14
[DefaultValue(456)] // 如果属性 (Property) 具有简单的默认值,则应用 DefaultValueAttribute
15
public int SimpleProperty
16
{
17
get { return simpleField; }
18
set { simpleField = value; }
19
}
20![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
21
// 注意:这里设置了复杂属性的初始值 new SimpleCustomType(1, 2)
22
private SimpleCustomType complexField = new SimpleCustomType(1, 2);
23![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
24
[Category("我是复杂的属性哦!")]
25
[Description("我是简单的复杂属性,因为我是由简单的类型和简单的方式定义的。\n定义我的类型很简单,只有两个属性(Min, Max);定义我的body也很简单,只是简单的get, set.")]
26
[TypeConverter(typeof(SimpleCustomTypeConverter))]
27
public SimpleCustomType ComplexProperty
28
{
29
get { return complexField; }
30
set { complexField = value; }
31
}
32![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
33
// 如果属性不具有简单的默认值,则可以为属性提供可选方法 ShouldSerialize 和 Reset。
34
/// <summary>
35
/// 设置复杂属性的默认值 new SimpleCustomType(8, 9)
36
/// </summary>
37
public void ResetComplexProperty()
38
{
39
ComplexProperty = new SimpleCustomType(8, 9);
40
}
41![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
42
/// <summary>
43
/// 诸如 Visual Studio 之类的设计器可使用 ShouldSerializePropertyName 方法来检查属性是否已不再使用其默认值,
44
/// 并仅在属性发生改变的情况下将代码写入到窗体中,从而更有效地生成代码。
45
/// </summary>
46
/// <returns></returns>
47
public bool ShouldSerializeComplexProperty()
48
{
49
return (ComplexProperty.Min != 8 || ComplexProperty.Max != 9);
50
}
51![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
52
protected override void OnPaint(PaintEventArgs e)
53
{
54
base.OnPaint(e);
55
e.Graphics.DrawRectangle(Pens.Red, new Rectangle(Point.Empty, new Size(Width - 1, Height - 1)));
56
}
57
}
58![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
59
简单的自定义类型
88![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
89
简单的自定义类型的类型转换器
140
}
141![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
2
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
3
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
4
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
5
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
6
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
7
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
8
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
9
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
10
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
11
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
12
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
13
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
14
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
15
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
16
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
17
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
18
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
19
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
20
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
21
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
22
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
23
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
24
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
25
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
26
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
27
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
28
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
29
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
30
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
31
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
32
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
33
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
34
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
35
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
36
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
37
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
38
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
39
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
40
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
41
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
42
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
43
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
44
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
45
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
46
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
47
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
48
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
49
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
50
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
51
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
52
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
53
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
54
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
55
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
56
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
57
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
58
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
59
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
88
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
89
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
140
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
141
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
强烈建议有需要的同学仔细阅读代码中的注释部分.并在本机上反复实践.
The end.