• CLR自定义.NET控件制作(2)——添加自定义属性、方法和事件


    第一节我讲了简单的自定义控件的生成,一个控件具备三项最基本的特性:属性、方法、事件。下面我就介绍如何给自定义控件添加自定义的属性、方法、事件。

    MyViewControl控件实际上是一个托管的类,他继承了System::Windows::Forms::UserControl,我们只需在MyViewControl.h中的MyViewControl类中添加相应的代码就OK了。

    自定义属性:

    public:

                  [Description("获取控件视图句柄")]

                  [BrowsableAttribute(false)]

                  property IntPtr ViewHandle

                  {

                       IntPtr get();

                       Void set(IntPtr value);

                  }

    关键字property代表自定义属性,IntPtr返回值,ViewHandle就是属性。其他的是描述信息,一一列举:

    BrowsableAttribute:描述是否一个属性或事件应该被显示在属性浏览器里。

    CategoryAttribute:描述一个属性或事件的类别,当使用类别的时候,属性浏览器按类别将属性分组。
    DescriptionAttribute:当用户在属性浏览器里选择属性的时候,description里指定的文本会显示在属性浏览器的下边,向用户显示属性的功能。
    BindableAttribute:描述是否一个属性倾向于被绑定。
    DefaultPropertyAttribute:为组件指定一个默认的属性,当用户在Form设计器上选择一个控件的时候,默认属性会在属性浏览器里被选中。   

    DefaultValueAttribute:为一个简单类型的属性设置一个默认值。

    EditorAttribute:为属性指定一个特殊的编辑器。
    LocalizableAttribute:指示一个属性是否能被本地化,任何有这个Attribute的属性将会被持久化到资源文件里。   
    DesignerSerializationVisibilityAttribute:指示一个属性是否或者如何持久化到代码里。
    TypeConverterAttribute:为属性指定一个类型转换器,类型转换器能将属性的值转化成其它的数据类型。
    DefaultEventAttribute:为组件指定一个默认的事件,当用户在form设计其中选择一个控件的时候,在属性浏览器中这个事件被选中。

    这些设计时的Attribute时很重要的,如果使用的好,将会对用户的使用带来很大的便利。

    自定义方法:

    自定义方法跟c++普通类中的方法一样,只要我们在MyViewControl类中添加方法就OK了,

                  void Test(){};

    若要重写自带的方法,则加virtual及override关键字,如我要重写Refresh()函数,则如下:

    virtual void  Refresh() override {};

    自定义事件:

    自定义事件用关键字delegate,先定义委托,再写事件触发的函数。

             public:

                  delegate void MyTestEventHandle(System::Object^ sender, EventArgs^ e);

                  [Description("自定义事件")]

                  event MyTestEventHandle^ MyTest;

                  void OnMyTest (EventArgs^ e)

                  {

                       MyTest (this, e);

                  }

    若要触发此事件,必需在相应的地方响应MyTest (EventArgs^ e)函数,并定义一个EventArgs,如此事件的触发:

    EventArgs^  MyArgs = gcnew EventArgs();

    MyTest (MyArgs);

    这样就触发了此事件,若要传递自己的参数,则要自己定义一个继承自EventArgs的类,这个以后会提到。

    注意:若要在属性浏览器中看到自定义事件,则必须定义为public,前面的方法也是这样。

     

  • 相关阅读:
    【转】 IntelliJ IDEA 详细图解最常用的配置 ,适合刚刚用的新人
    安装IntelliJ IDEA默认C盘文件过大怎么办
    [linux]netstat命令详解-显示linux中各种网络相关信息
    [linux]free命令详解-显示内存的使用情况
    用什么工具能找出性能瓶颈?
    [linux]iostat命令详解-监视系统输入输出设备和CPU的使用情况
    [linux]vmstat命令详解-显示虚拟内存状态
    好文章列表
    BigDecimal.setScale 处理java小数点
    Mybatis通用分页
  • 原文地址:https://www.cnblogs.com/cjingzm/p/2106868.html
Copyright © 2020-2023  润新知