zoukankan      html  css  js  c++  java
  • C#winform窗体用户控件自定义事件

    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("数据已保存");
            }
     
    到这里,我们从 自定义控件 -> 自定义事件 -> 触发事件 -> 绑定方法  的步骤已经全部完成了。有不明白的请通过回复的方式提问,对讲的不好的,也欢迎指出~
  • 相关阅读:
    问题解决:System.TypeLoadException: 未能从程序集“XXX”中加载类型“XXX
    域名格式验证
    .NET 中String 和StringBuilder 以及他们的区别
    mysql 重设管理员密码 或忘记管理员密码 (必杀)
    CMD 命令
    C# 给多线程传参的三种方式
    django 表单数据的验证实现原理
    django上传文件
    django signal
    Django如何处理语言偏好(根据此可以设置中文)
  • 原文地址:https://www.cnblogs.com/zhuxiaoxiao/p/4905910.html
Copyright © 2011-2022 走看看