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,前面的方法也是这样。