C#许多事情都和事件有关系,大部分的事情我们可以通过C#自己的事件来完成,但如果我们自己新建了一个自定义控件,我们该如何定义自己想要的事件呢?下面我就来为大家粗略的讲解一番。

假设我们自定义了一个控件,它的类名是MyControl,我们在test类(test也是一个窗体)中使用它,我们要在test中写方法,在MyControl中写事件,这该怎么做?如何在test中捕获Mycontrol中的事件,如何让事件绑定test中的方法?
假设MyControl是一个组合控件,假设有一个按钮btn_Ok,它在组合控件System.Windows.Forms.ToolStrip​中,假设这个容器叫toolstrip,当我们点击了之后需要响应一个事件,提示我们数据保存了,这个事件我们起个名字叫Btn_Ok_Clicked(当然也可以叫datasaved或者其它),下面要定义这个事件,我们这么定义:
 
private static readonly object Event_Btn_Ok_Clicked = new object();
 
        public event EventHandler Btn_Ok_Clicked
        {
            add { base.Events.AddHandler(Event_Btn_Ok_Clicked , value); }
            remove { base.Events.RemoveHandler(Event_Btn_Ok_Clicked , value); }
        }
然后我们需要定义一个方法,用来引发这个事件
 
protected virtual void OnBtn_OK_Click(EventArgs e)
        {
            EventHandler handler =
                base.Events[Event_Btn_Ok_Clicked ] as EventHandler;
            if (handler != null)
            {
                handler(this, e);
            }
        }
 
该方法定义完了之后,我们需要通过捕获原本的事件,然后引发该事件
点击btn_Ok会引发toolstrip的click事件,我们在捕获click事件后对数据进行处理
        
        private void ToolStripItemClicked(
            object sender, ToolStripItemClickedEventArgs e)
        {
            switch (e.ClickedItem.Name)
            {
                case "btn_Ok":
                    OnBtn_OK_Click(e);
                    break;
    }
  }
以上方法定义在MyControl类中
 
 
到这里,MyControls中的事件和方法就都定义和实现完了,下面我们来讲在test中如何对这个事件的引用。
 
以下代码都在test类中
我们通过拖控件或者代码的方式在test窗体中添加控件
        private MyControl control;
在窗体初始化的时候为刚才我们自定义的事件添加方法,方法名是functiontest
        control. Btn_Ok_Clicked += new EventHandler(functiontest);
现在我们来定义functiontest方法,假设我们就是为了提示“数据已保存”
        private void functiontest(object sender, EventArgs e)
        {
                MessageBox.Show("数据已保存");
        }
 
到这里,我们从 自定义控件 -> 自定义事件 -> 触发事件 -> 绑定方法  的步骤已经全部完成了。有不明白的请通过回复的方式提问,对讲的不好的,也欢迎指出~

C#winform窗体用户控件自定义事件的更多相关文章

  1. WinForm窗体及其控件的自适应

    3步骤: 1.在需要自适应的Form中实例化全局变量   AutoSizeFormClass.cs源码在下方 AutoSizeFormClass asc = new AutoSizeFormClass ...

  2. 转:C# WinForm窗体及其控件的自适应

    一.说明 2012-11-30 曾经写过 <C# WinForm窗体及其控件自适应各种屏幕分辨率>  ,其中也讲解了控件自适应的原理.近期有网友说,装在panel里面的控件,没有效果? 这 ...

  3. C# WinForm窗体及其控件自适应各种屏幕分辨率

    C# WinForm窗体及其控件自适应各种屏幕分辨率 一.说明  我们自己编写程序的界面,会遇到各种屏幕分辨率,只有自适应才能显的美观.实际上,做到这点也很简单,就是首先记录窗体和它上面控件的初始位置 ...

  4. C# winform中自定义用户控件 然后在页面中调用用户控件的事件

    下面是用户控件的代码: using System; using System.Collections.Generic; using System.ComponentModel; using Syste ...

  5. c#给用户控件添加事件处理程序

    1.首先在usercontrol后台添加如下代码: public partial class MyControl: UserControl { //添加事件代理       public event ...

  6. 模拟winform里的控件的事件和委托机制

    参考:.NET 中的委托 委托的两大用处 1.委托可以实现方法作为参数进行传递,如 /// <summary> /// the English speaker. /// </summ ...

  7. C# Winform窗体和控件自适应大小

    1.在项目中创建类AutoSizeForm AutoSizeForm.cs文件代码: using System; using System.Collections.Generic; using Sys ...

  8. 【Winfrom-适配窗体】 WinForm窗体及其控件的自适应,控件随着窗体变化

    在Winform中,窗体最大化之后,控件仍然保持原来的大小,就会显得不好看,那么有什么办法让控件跟着窗体变化吗? 在需要自适应的Form中代码如下:(AutoSizeFormClass.cs源码在下方 ...

  9. WinForm窗体PropertyGrid控件的使用

    使用过 Microsoft Visual Basic 或 Microsoft Visual Studio .NET的朋友,一定使用过属性浏览器来浏览.查看或编辑一个或多个对象的属性..NET 框架 P ...

随机推荐

  1. Python从入门到精通之First!

    Python的种类 Cpython Python的官方版本,使用C语言实现,使用最为广泛,CPython实现会将源文件(py文件)转换成字节码文件(pyc文件),然后运行在Python虚拟机上. Jy ...

  2. 跨域ajax问题

    1. Intro 在用ajax请求时,请求的域名和所在域名不同,会出现跨域问题导致请求失败. 复杂请求: 条件: .请求方式:HEAD.GET.POST .请求头信息: Accept Accept-L ...

  3. MySQL常用内置变量

      MySQL用很多常用的内置变量,掌握这些内置变量后对于我们快速获取当前MySQL的配置有很大帮助,下面就来列举几个常用的变量. 查看当前MySQL版本号信息.show variables like ...

  4. 2月第3周业务风控关注|上海网信办复测23个被约谈APP 涉及1号店、小红书等

    易盾业务风控周报每周呈报值得关注的安全技术和事件,包括但不限于内容安全.移动安全.业务安全和网络安全,帮助企业提高警惕,规避这些似小实大.影响业务健康发展的安全风险. 1.上海网信办复测23个被约谈A ...

  5. 聚簇索引(clustered index )和非聚簇索引(secondary index)的区别

    这两个名字虽然都叫做索引,但这并不是一种单独的索引类型,而是一种数据存储方式.对于聚簇索引存储来说,行数据和主键B+树存储在一起,辅助键B+树只存储辅助键和主键,主键和非主键B+树几乎是两种类型的树. ...

  6. JavaScript控制页码的显示与隐藏

    前端页面开发分页显示功能时,一般都要求使用自定义的页码样式,直接用网上分页插件就比较麻烦了,这里记录一下工作中总结的一个比较简单通用的控制页码显示与隐藏的的js代码. 首先是使用时需要自己根据自己具体 ...

  7. ssh命令-使用密钥文件进行登陆

    在win上面可以使用XSHELL来登录类似于阿里云这样的安全服务器,在ubuntu上面就可以使用系统自带的命令工具来连接 使用命令 ssh -i key.pem [server] 实例如下: ssh ...

  8. bootstrap教程,SQL

    版权声明:未经博主允许不得转载 SQL DDL数据定义语言 TPL事务处理语言 DCL数据控制语言 DML数据操作语言 DML SELECT INSERT UPDATE DELETE Join从句 J ...

  9. 理解js中的函数调用和this

    概述 这是我看typescript的时候看引用资源看到的,原文在这里:Understanding JavaScript Function Invocation and "this" ...

  10. SSH配置免密登录

    [参考文章]:linux服务器ssh免密码登录 [参考文章]:ssh分发秘钥时出现错误“Permission denied (publickey,gssapi-keyex,gssapi-with-mi ...