PropertyGrid—默认属性,默认事件,属性默认值
零.引言
PropertyGrid显示一个对象的属性和事件时,可以设置其默认属性和事件,也就是当你选中对象时,propertyGrid中焦点在哪一个属性或事件上。为对象的属性提供默认值,使PropertyGrid显示属性时,更加友好。
一.默认属性和默认事件
PropertyGrid能识别默认属性和事件,例如在设计时,双击Form框,就会跳到Form的Load事件中,这是因为Form的默认事件是Load。当你选中属性框中的某一项后,该项会着色(蓝色)选中,在属性和事件选项卡之间切换,就会发现,选中的始终是默认的属性和事件(例如,Form,选中的就是Text属性和Load事件)。
下面我们就来设计默认属性和事件,还是以MyControl为例。
//控件
[DefaultProperty("Angle")]
[DefaultEvent("Test")]
public class MyControl : System.Windows.Forms.UserControl
{
private double _angle = 90D;
private Color _penColor = Color.Red; public delegate void TestDefaultEvent();
public event TestDefaultEvent Test; [BrowsableAttribute(true)]
public double Angle
{
get
{ return _angle; }
set
{ _angle = value; }
} [Browsable(true)]
public Color PenColor
{
get
{
return _penColor;
}
set
{
_penColor = value;
Invalidate();
}
}
public MyControl()
{ } protected override void OnPaint(System.Windows.Forms.PaintEventArgs e)
{
e.Graphics.DrawString("The Angle is " + _angle, this.Font, new SolidBrush(this._penColor),,);
}
}
非常简单,只需要给类加上DefaultProperty和DefaultEvent特性,在特性中指明属性或事件名称即可。
二.属性的默认值
一般来说,属性都有一个默认值。我们经常看到,在PropertyGrid中,有些属性字体是没有加粗的,而有些却加粗,没加粗的是默认属性,修改后就会变粗,改为默认值后,又不加粗,这是为了方便开发人员设别哪些属性修改了的。
如何达到这样的效果,需要给属性添加默认值。这里又分两种情况,对于基础类型(如int,float等)直接加上默认值特性即可,但对于一些复杂的属性,则要使用函数来设置,如下的例子:
//控件
[DefaultProperty("Angle")]
[DefaultEvent("Test")]
public class MyControl : System.Windows.Forms.UserControl
{
private double _angle = 90D;
private Color _penColor = Color.Red; public delegate void TestDefaultEvent(); public event TestDefaultEvent Test; [BrowsableAttribute(true)]
[DefaultValue(90D)]
public double Angle
{
get
{ return _angle; }
set
{ _angle = value; }
} [Browsable(true)]
public Color PenColor
{
get
{
return _penColor;
}
set
{
_penColor = value;
Invalidate();
}
} public void ResetPenColor()
{
PenColor = Color.Red;
} public bool ShouldSerializePenColor()
{
return PenColor != Color.Red;
} public MyControl()
{
//this._angle = 90;
} protected override void OnPaint(System.Windows.Forms.PaintEventArgs e)
{
e.Graphics.DrawString("The Angle is " + _angle, this.Font, new SolidBrush(this._penColor),,);
}
}
这里有两个属性,Angle和PenColor,一个是简单数据类型,只需给他加上DefaultValue特性即可,但要注意默认值的后缀,必须使用类型相关的后缀,否则设置无效。
一个Color类型的属性,我们无法使用上面的方式,否则编译错误。我们需要给他提供两个函数ResetPenColor和ShouldSerializePenColor,关键在于函数的取名,Reset + 属性名,ShouldSerialize + 属性名。ResetPenColor告诉设计器PenColor的默认值是什么,ShouldSerializePenColor告诉设计器,什么时候将属性进行设计时序列化,这里,我们让其值不为默认值时,进行序列化。
需要注意的是,设置属性的默认值时,也要设置属性变量的初始值,当然,要与默认值相同。
三.完整代码
下面是完整的代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;
using System.Drawing; namespace TestDefaultProperty
{
//控件
[DefaultProperty("Angle")]
[DefaultEvent("Test")]
public class MyControl : System.Windows.Forms.UserControl
{
private double _angle = 90D;
private Color _penColor = Color.Red; public delegate void TestDefaultEvent(); public event TestDefaultEvent Test; [BrowsableAttribute(true)]
[DefaultValue(90D)]
public double Angle
{
get
{ return _angle; }
set
{ _angle = value; }
} [Browsable(true)]
public Color PenColor
{
get
{
return _penColor;
}
set
{
_penColor = value;
Invalidate();
}
} public void ResetPenColor()
{
PenColor = Color.Red;
} public bool ShouldSerializePenColor()
{
return PenColor != Color.Red;
} public MyControl()
{
//this._angle = 90;
} protected override void OnPaint(System.Windows.Forms.PaintEventArgs e)
{
e.Graphics.DrawString("The Angle is " + _angle, this.Font, new SolidBrush(this._penColor),,);
}
}
}
新建Windows工程,添加该代码,将MyControl控件拖入Form中,在属性框中查看其属性。
PropertyGrid—默认属性,默认事件,属性默认值的更多相关文章
- HTML 5 全局属性和事件属性
1.HTML 5 全局属性 HTML 属性能够赋予元素含义和语境. 下面的全局属性可用于任何 HTML5 元素. NEW:HTML 5 中新的全局属性. 属性 描述 accesskey 规定访问元素的 ...
- HTML 标准属性 和 事件属性
HTML的公共属性 HTML 和 XHTML 标签支持的标准属性 核心属性 (Core Attributes) 以下标签不提供下面的属性:base.head.html.meta.param.scrip ...
- [转]Delphi 控件属性和事件
常用[属性] Action:该属性是与组件关联的行为,允许应用程序集中响应用户命令 Anchors:与组件连接的窗体的位置点 Align:确定组件的对齐方式 AutoSize:确定组件是否自动调整其大 ...
- Windows控件的属性与事件
Treeview控件重要属性和事件 属性 说明 Nodes Treeview控件中所有树节点 SelectdNode 当前Treeview控件中选定的树节点,如果当前没有选定树节点,返回值为null ...
- HTML-全局属性 / 事件属性(转)
拷贝自:< http://www.runoob.com > HTML 全局属性 New : HTML5 新属性. 属性 描述 accesskey 设置访问元素的键盘快捷键. class 规 ...
- HTML 事件属性(摘自菜鸟教程)
HTML 事件属性 全局事件属性 HTML 4 的新特性之一是可以使 HTML 事件触发浏览器中的行为,比方说当用户点击某个 HTML 元素时启动一段 JavaScript. 如果你想学习更多关于事件 ...
- HTML-参考手册: HTML 事件属性
ylbtech-HTML-参考手册: HTML 事件属性 1.返回顶部 1. HTML 事件属性 全局事件属性 HTML 4 的新特性之一是可以使 HTML 事件触发浏览器中的行为,比方说当用户点击某 ...
- 【有意思的BUG】默认置灰的属性的值传递
数据由Client发送给Server,如下图所示,Server在收到请求后会响应Client. 比如Client发送给Server一组数据:Name:sean&Hobby:movies& ...
- [转]Struts2理解--动态方法和method属性及通配符_默认Action
众所周知,默认条件下,在浏览器输入indexAction!execute.action,便会执行indexAction类里的execute方法,这样虽然方便,但可能带来安全隐患,通过url可以执行Ac ...
- Struts2理解--动态方法和method属性及通配符_默认Action
众所周知,默认条件下,在浏览器输入indexAction!execute.action,便会执行indexAction类里的execute方法,这样虽然方便,但可能带来安全隐患,通过url可以执行Ac ...
随机推荐
- 格而知之5:我所理解的Run Loop
1.什么是Run Loop? (1).Run Loop是线程的一项基础配备,它的主要作用是来让某一条线程在有任务的时候工作.没有任务的时候休眠. (2).线程和 Run Loop 之间的关系是一一对应 ...
- ORACLE数据库、表空间、表的容量相关查询--1
未完待续……未完待续……未完待续……未完待续…… 1.查询某个表所占空间大小 col tablespace_name for a15 col segment_name for a15 col segm ...
- iOS动画一点也不神秘————你是喜欢看幻灯片?还是看高清电影?
iOS设备在平均线上硬件比andorid设备良好许多,尤其是内存和CPU,所以iOS应用里面有大量动画交互效果的交互,这是每个用户都喜悦的,如果每个操作对应界面来讲都是直接变化,那变得十分地生硬. 你 ...
- LoadRunner如何在注册业务脚本中设置参数化唯一性
LR在录制一个网站注册业务的脚本时,突然间遇到一个问题:注册时,由于注册用户需要验证唯一性,所以在LR回放脚本时,用Run-time Viewer工具回放可以发现(先在脚本中设置几个断点),真实运行的 ...
- SVN中tag branch trunk用法详解
SVN中tag branch trunk用法详解 2010-05-24 18:32 佚名 字号:T | T 本文向大家简单介绍一下SVN中tag branch trunk用法,SVN中tag bran ...
- 在apache2.4版本之前做客户端访问控制,是用Allow Deny Order指令做访问控制的,
在apache2.4版本之前做客户端访问控制,是用Allow Deny Order指令做访问控制的,而在2.4的版本上是用的用法跟之前的版本大不相同,如下 ###################### ...
- android——背景颜色渐变(梯度变化)
首先在drawable文件夹下面新建一个xml文件,起名为bgcolor.xml. 代码如下: <?xml version="1.0" encoding="utf- ...
- mvc 笔记
@{ ViewBag.Title = "主页"; } <div> 这里就是渲染Body啦.~~不需要写神马<asp:Content />,其实因为Rende ...
- Android中Handle详解
上图为本人总结的Handler,网上发现一片总结很好的博客就copy过来:作为参考 Handler有何作用?如何使用? 一 .Handler作用和概念 包含线程队列和消息队列,实现异步的消息处理机制, ...
- Oracle EBS-SQL (OM-3):销售连接停靠站时冲减库存出错处理.sql
DELETE FROM INV.MTL_RESERVATIONS MRWHERE EXISTS (SELECT 1 FROM WSH.WSH_DELIVERY_ASSIGNMENTS WDA ...