当前位置:首页 > Windows程序 > 正文

C#中的自定义控件中的属性、事件及一些相关特性的总结

2021-03-28 Windows程序

今天学习了下C#用户控件开发添加自定义属性的事件,主要参考了MSDN,总结并实验了一些用于开发自定义属性和事件的特性(Attribute)。

在这里先说一下我的环境:

操作系统:Windows7旗舰版(Service Pack 1)

VS版本:Microsoft Visual Studio Ultimate 2012,版本 11.0.50727.1 RTMREL

.NET Framework版本:4.5.50938

C#版本:Visual C# 2012

一、准备工作

1、建立一个C#窗体应用程序,主窗体起名为FormMain,向解决方案中再加入一个用户控件,起名为TestUserControl

技术分享

2、在TestUserControl中放一个按钮,取名为btnTest

技术分享

3、控件做好后,会出现在【工具箱】内

技术分享

4、将控件拖拽到一个窗体(Form)上就可以使用了,取名testUserControl1。这个名字是VS默认取的,即首字母小写,最后补上数字作为序号。

技术分享

二、添加自定义属性

在TestUserControl类中,添加下面的代码:

/// <summary> /// 按钮名称 /// </summary> public string ButtonName {     get     {         //TODO         return btnTest.Text;     }     set     {         //TODO         btnTest.Text = value;     } }

代码添加完毕后,在FormMain上加入的testUserControl1的属性中,就会出现BtnName了

技术分享

三、添加自定义事件

在TestUserControl类中,添加下面的代码:

/// <summary> /// 事件 /// </summary> public event EventHandler BtnTestClick; /// <summary> /// 测试按钮 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnTest_Click(object sender, EventArgs e) {     if (BtnTestClick != null)     {         //TODO         BtnTestClick(sender, e);     } }

代码添加完毕后,在FormMain上加入的testUserControl1的事件中,就会出现BtnTestClick了

技术分享

在FormMain的代码中实现这个函数

private void testUserControl1_BtnTestClick(object sender, EventArgs e) {     MessageBox.Show(sender.ToString() + "\r\n" + e.ToString()); }

这时运行程序,点击控件testUserControl1内的按钮btnTest,就会有下面的效果:

技术分享

四、几个特性(Attribute)
1)DefaultEvent和DefaultProperty:指定自定义控件的默认事件和默认属性

DefaultEventAttribute(MSDN)可以用来指定组件的默认事件,如在TestUserControl类上面加入代码

[DefaultEvent("BtnTestClick")]

那在Form编辑界面,双击控件testUserControl1就会自动进入testUserControl1_BtnTestClick事件。

这里再说明一下,C#中的System.Windows.Forms.Control类代码如下:

[ClassInterface(ClassInterfaceType.AutoDispatch)] [ComVisible(true)] [DefaultEvent("Click")] [DefaultProperty("Text")] [Designer("System.Windows.Forms.Design.ControlDesigner, System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")] [DesignerSerializer("System.Windows.Forms.Design.ControlCodeDomSerializer, System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", "System.ComponentModel.Design.Serialization.CodeDomSerializer, System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")] [ToolboxItemFilter("System.Windows.Forms")] public class Control : Component, IDropTarget, ISynchronizeInvoke, IWin32Window, IBindableComponent, IComponent, IDisposable { /* ... */ }

这里可以看到DefaultEvent的值为“Click”,这也就是为什么拖入Form的按钮(Button),在双击后会进入它的Click事件:

private void button1_Click(object sender, EventArgs e)

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/69252.html