mapserver

简单的生活,简单的编程(Code Snippet Storage 2 进行中... ...)。

导航

统计

公告

未经许可,请不要转载我的文章。

昵称:mapserver
园龄:6年8个月
粉丝:8
关注:0

搜索

 
 

常用链接

随笔分类(13)

文章分类(21)

My Links

积分与排名

最新评论

推荐排行榜

.NET组件编程(2) PropertyAttribute和EventAttribute

        昨天晚上写了基础篇,有朋友说写的太简单,我想在这里申明下:因为我要写组件编程的完整系列,所以从最简单的开始写起,而且园子里有很多的朋友可能从来都没有写组件的经历,在这里希望有组件开发经验的朋友能多多包涵。
        前一章,我们创建了最简单的组件,今天讲讲Component的PropertyAttribute和EventAttribute。
        EventAttribute有:
                BrowsableAttribute 、CategoryAttribute、DescriptionAttribute、DefaultEventAttribute
        PropertyAttribute有:
                BrowsableAttribute 、CategoryAttribute、DescriptionAttribute、DefaultPropertyAttribute、DefaultValueAttribute、EditorAttribute
、DesignerSerializationVisibilityAttribute、TypeConverterAttribute、BindableAttribute、LocalizableAttribute
       
        在本章教程中我们主要讲以上红色的Attribute,再下章的Designer UI会讲蓝色的Attribute,紫色的Attribute不作讲解。
     上述的Attribute简明阐述如下:
             BrowsableAttribute:在Property窗口中是否可见。
             CategoryAttribute:Property或者Event所属的哪个组。
             DescriptionAttribute:Property或者Event的简单描述。
             DefaultEventAttribute:默认Event、。
             DefaultPropertyAttribute:默认Property,选中组件,其Property窗口中默认选中在这个Property上。
             DefaultValueAttribute:Property的默认值,选中组件,其Event窗口中默认选中在这个Event上。

using System;
using System.Collections.Generic;
using System.Text;
using System.ComponentModel;

namespace Components
{
    
// PropertyAttribute、EventAttribute分别放在Property、Event上,并[]括起来。
    
// DefaultPropertyAttribute、DefaultEventAttribute必须放在类头上。
    [DefaultEvent("CustomerLogout")]  
    
public class Customer : Component
    
{
        
private string _id;
        
private string _sex;
        
private int _age;
        
private string _address;
        
private DateTime _createTime;

        
// 没有CategoryAttribute、DescriptionAttribute。
        public string Id
        
{
            
get return _id; }
            
set { _id = value; }
        }


        
// 此属性在Customer's Details分组中,CategoryAttribute、DescriptionAttribute也适用于Event。
        [Category("Customer's Details"), Description("Customer's Sex")]  // 可以在一个[]里写两个Attribute。
        public string Sex
        
{
            
get return _sex; }
            
set { _sex = value; }
        }


        [Category(
"Customer's Details")]
        [Description(
"Customer's Age"), DefaultValue(20)]
        
public int Age
        
{
            
get return _age; }
            
set { _age = value; }
        }


        [DefaultValue(
"shanghai"),Category("Customer's Details")]
        
public string Address
        
{
            
get return _address; }
            
set { _address = value; }
        }


        [Browsable(
false)] // 此Property在Property窗口中不可见,BrowsableAttribute也适用于Event。
        public DateTime CreateTime
        
{
            
get return _createTime; }
            
set { _createTime = value; }
        }




        
public sealed class CustomerLoginEventArgs : EventArgs
        
{ }
        
public sealed class CustomerLogoutEventArgs : EventArgs
        
{ }

        
public delegate void CustomerLoginEventHandler(object sender, CustomerLoginEventArgs e);
        
public delegate void CustomerLogoutEventHandler(object sender, CustomerLogoutEventArgs e);

        
public event CustomerLoginEventHandler CustomerLogin
        
{
            add 
{ }
            remove 
{ }
        }


        
public event CustomerLogoutEventHandler CustomerLogout
        
{
            add 
{ }
            remove 
{ }
        }

    }

}

其Property、Event窗口如下:



我原来没有用过DefaultValueAttribute,上面代码中的Address、Age在Customer1创建时没有得到DefaultValue,我会找出原因,并在下章补上,也希望知道的朋友能告之。

posted on 2006-03-07 09:47 mapserver 阅读(6813) 评论(21)  编辑 收藏

评论

#1楼 2006-03-07 13:03 zypro[未注册用户]

支持LZ,希望每天再多写一点.  回复 引用   

#2楼 2006-03-07 14:17 zzz[未注册用户]

支持LZ  回复 引用   

#3楼 2006-03-07 14:31 lybabiandbel[未注册用户]

组件控件编程的文章太少了,应该多写点,自己写的控件太差了,要学习一下啊!
绝对支持!
 回复 引用   

#4楼[楼主] 2006-03-07 15:31 Mapserver      

谢谢楼上的兄弟们,你们的支持就是我动力。  回复 引用 查看   

#5楼 2006-03-07 15:35 天天天蓝      

内容太少太少
每天多来点啊
 回复 引用 查看   

#6楼[楼主] 2006-03-07 15:39 Mapserver      

楼上的兄弟,最近比较忙,我会每天尽可能多的写些。感谢你的关注。  回复 引用 查看   

#7楼 2006-03-07 17:23 韦恩卑鄙      

很不错  看了以后一顿狂看msdn  谢谢拉  回复 引用 查看   

#8楼 2006-03-08 08:54 baoli[未注册用户]

又来捧捧场,希望楼主可以坚持把这个系列写完^_^  回复 引用   

#9楼 2006-03-08 13:17 Colin Han      

DefaultValueAttribute设置当前属性的默认值。例如:Age的默认值是18。可以写成:

[DefaultValue(18)]
public int Age { get; set; }

这个特性可以帮助IDE减少Code生成的工作。上面的代码表示,如果设计时Age的值为18时,IDE将不会为这个属性生成代码。否则,IDE会自动在InitializeComponent函数中添加如下的代码:

customer1.Age = 20;
 回复 引用 查看   

#10楼[楼主] 2006-03-08 13:25 mapserver      

@Colin Han
非常谢谢你的回复,我搞懂了,我曲解DefaultValueAttribute的含义了。
 回复 引用 查看   

#11楼 2006-03-25 10:46 陶维佳[未注册用户]

private int _age;
把你的DefaultValue冲掉了。。。
 回复 引用   

#12楼 2006-07-03 21:56 5饿[未注册用户]

疯狂支持者!!!!!!!!!  回复 引用   

#13楼 2006-11-17 10:11 liujiwe79[未注册用户]

不错,我也专门也组件,以后我们合作写本书吧,我现在主要研究点国外的组件代码  回复 引用   

#14楼 2007-02-11 11:09 lipeng[未注册用户]

为什么我的事件在属性浏览器中保存不住?
双击某个组件中的事件时VS2005为我生成了事件处理函数,单当我关闭工程再打开时发现属性浏览器中该事件的处理函数为空白,麻烦您请教一下这是为什么?
 回复 引用   

#15楼 2007-07-25 09:38 kop[未注册用户]

支持:)  回复 引用   

#16楼 2007-09-29 11:30 问题[未注册用户]

为什么
public DateTime CreateTime
{
get { return _createTime; }
set { _createTime = value; }
}
这个属性在Property窗口中看不见呢.是因为它是DateTime ?还是因为什么啊.
 回复 引用   

#17楼 2007-11-24 08:46 lxy[未注册用户]

我顶,正在学习。  回复 引用   

#18楼 2008-07-05 10:39 谢良威      

@问题
[Browsable(false)] // 此Property在Property窗口中不可见,BrowsableAttribute也适用于Event。
 回复 引用 查看   

#19楼 2009-09-21 15:17 8413464      

定楼主  回复 引用 查看   

#20楼 2009-12-09 22:00 遛扬狗      

留个脚印,以后来看。  回复 引用 查看