WinForm控件开发总结(十)-----为属性设置默认值
来源:互联网 发布:win8.1windows激活密钥 编辑:程序博客网 时间:2024/05/15 08:32
如果你为属性设定了默认值,那么当开发者修改了属性的值,这个值在Property Explorer中将会以粗体显示。VS为属性提供一个上下文菜单,允许程序员使用控件把值重置为默认值。当VS进行控件的串行化时,他会判断那些值不是默认值,只有不是默认值的属性才会被串行化,所以为属性提供默认值时可以大大减少串行化的属性数目,提高效率。
那么VS怎么知道我们的属性值不是默认值了呢?我们需要一种机制来通知VS默认值。实现这种机制有两种方法:
对于简单类型的属性,比如Int32,Boolean等等这些Primitive类型,你可以在属性的声明前设置一个DefaultValueAttribute,在Attribute的构造函数里传入默认值。
对于复杂的类型,比如Font,Color,你不能够直接将这些类型的值传递给Attibute的构造函数。相反你应该提供Reset<PropertyName> 和ShouldSerialize<PropertyName>方法,比如ResetBackgroundColor(),ShouldSerializeBackgroundColor()。VS能够根据方法的名称来识别这种方法,比如Reset<PropertyName>方法把重置为默认值,ShouldSerialize<PropertyName>方法检查属性是否是默认值。过去我们把它称之为魔术命名法,应该说是一种不好的编程习惯,可是现在微软依然使用这种机制。我还是以前面几篇文章使用的例子代码。
using System;using System.Collections.Generic;using System.Text;using System.Windows.Forms;using System.ComponentModel;using System.Drawing;namespace CustomControlSample{ public class FirstControl : Control {private String _displayText=”Hello World!”;private Color _textColor=Color.Red; public FirstControl() { } // ContentAlignment is an enumeration defined in the System.Drawing // namespace that specifies the alignment of content on a drawing // surface. private ContentAlignment alignmentValue = ContentAlignment.MiddleLeft; [ Category("Alignment"), Description("Specifies the alignment of text.") ] public ContentAlignment TextAlignment { get { return alignmentValue; } set { alignmentValue = value; // The Invalidate method invokes the OnPaint method described // in step 3. Invalidate(); } } [Browsable(true)] [DefaultValue(“Hello World”)] public String DisplayText{get{return _displayText;}set{ _displayText =value; Invalidate();}}[Browsable(true)]public Color TextColor{get{ return _textColor;}set{ _textColor=value;Invalidate();}}public void ResetTextColor(){ TextColor=Color.Red;}public bool ShouldSerializeTextColor(){return TextColor!=Color.Red;}protected override void OnPaint(PaintEventArgs e) { base.OnPaint(e); StringFormat style = new StringFormat(); style.Alignment = StringAlignment.Near; switch (alignmentValue) { case ContentAlignment.MiddleLeft: style.Alignment = StringAlignment.Near; break; case ContentAlignment.MiddleRight: style.Alignment = StringAlignment.Far; break; case ContentAlignment.MiddleCenter: style.Alignment = StringAlignment.Center; break; } // Call the DrawString method of the System.Drawing class to write // text. Text and ClientRectangle are properties inherited from // Control. e.Graphics.DrawString( DisplayText, Font, new SolidBrush(TextColor), ClientRectangle, style); } }}在上面的代码中,我增加了两个属性,一个是DisplayText,这是一个简单属性,我们只需要在它的声明前添加一个DefaultValue Attribute就可以了。另外一个是TextColor属性,这个复杂类型的属性,所以我们提供了ResetTextColor和ShouldSerializeTextColor来实现默认值。
默认值的实现就讲完了,但是有一点不要忽视了,你设定了默认值,就应该相应的初始化这些属性,比如我们例子中的代码:
private String _displayText=”Hello World!”;private Color _textColor=Color.Red;
- WinForm控件开发总结(十)-----为属性设置默认值
- WinForm控件开发总结(十)-----为属性设置默认值
- C# WinForm控件开发如何设置属性的默认值
- C# WinForm控件开发设置默认值是非常有必要的,实现起来也很容易,本文笔者为你介绍设置默认值的方法,希望能给你带来帮助。
- WinForm控件开发总结(七)-----为复杂属性的子属性提供编辑功能
- WinForm控件开发总结(九)-----为属性提下拉式属性编辑器
- WinForm控件开发总结(七)-----为复杂属性的子属性提供编辑功能
- WinForm控件开发总结(九)-----为属性提下拉式属性编辑器
- WinForm控件开发总结(五)-----为控件的复杂属性提供类型转换器
- WinForm控件开发总结(五)-----为控件的复杂属性提供类型转换器
- 如何为控件设置默认值
- WinForm控件开发总结(八)-----为属性提供弹出式编辑对话框
- WinForm控件开发总结(八)-----为属性提供弹出式编辑对话框
- c# WinForm开发 DataGridView控件的各种操作总结(单元格操作,属性设置)
- [网上搜集]c# WinForm开发 DataGridView控件的各种操作总结(单元格操作,属性设置)
- c# WinForm开发 DataGridView控件的各种操作总结(单元格操作,属性设置)
- c# WinForm开发 DataGridView控件的各种操作总结(单元格操作,属性设置)
- c# WinForm开发 DataGridView控件的各种操作总结(单元格操作,属性设置)
- WinForm控件开发总结(九)-----为属性提下拉式属性编辑器
- 视频相关术语
- C++ Primer Plus学习:第十章 对象和类(1)
- LINQ Group Query
- 10个救命的PHP代码片段
- WinForm控件开发总结(十)-----为属性设置默认值
- ANDROID兼容性测试框架(CTS)手册
- WinForm控件开发总结(十一)-----调试控件的设计时行为
- RGB和YUV之比较
- 不要用咖啡因短路你的身体
- C程序调用shell脚本共有三种法子
- 代码应该具有什么样的结构
- Zabbix 安装,配置和基本操作文档
- WinForm控件开发总结(十二)-----让控件处理导航键