zoukankan      html  css  js  c++  java
  • 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,前面的方法也是这样。

     

  • 相关阅读:
    Django项目实战之用户头像上传与访问
    ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (10061)
    《http权威指南》读书笔记13
    《http权威指南》读书笔记12
    《http权威指南》读书笔记11
    《http权威指南》读书笔记10
    《http权威指南》读书笔记9
    移动端帧动画抖动解决方案
    display: table-cell的实用应用
    《http权威指南》读书笔记8
  • 原文地址:https://www.cnblogs.com/cjingzm/p/2106868.html
Copyright © 2011-2022 走看看