由委托说明事件的由来1

2024-06-20 19:08
文章标签 说明 事件 委托

本文主要是介绍由委托说明事件的由来1,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

   委托的一些应用:
       多线程
       自定义类(用户控件、通信类……(事件)
       窗体之间回传值
       正则表达式中替换Email掩码Replace()
 

我们现在想在winform中添加两个窗体,每一个窗体上都添加同一个用户控件,用户控件上有一个button,点击按钮三次会提示内容。

我们想如果form1点击会提示:您点击了三次Form1按钮!

如果form2点击会提示:您点击了三次Form2按钮!

如果我们在用户控件的button的事件中写会提示相同的内容,所以我们应该使用委托来写。

1、在用户控件的代码中声明一个委托(类型);在form窗体中规定他要指向的方法;这个方法提示内容。

 

用户控件中的代码:

namespace WindowsFormsApplication2
{public delegate void TishiDelegate();public partial class UserControl1 : UserControl{public TishiDelegate tishi;public UserControl1(){InitializeComponent();}int count = 0;private void button1_Click(object sender, EventArgs e){count++;//MessageBox.Show("这是form1");if (tishi!=null&&count==3){tishi();count = 0;}}}
}


在form窗体加载的事件中为委托指向方法;代码如下:

 private void Form1_Load(object sender, EventArgs e)
        {
            this.userControl11.tishi = TishiForm;
        }
        private void TishiForm()
        {
            MessageBox.Show("您点击了三次Form1按钮!");
        }

form2窗体的代码与form1窗体的代码相同。

 

虽然上述方法已经实现所需要的功能,不过还是有不足之处

1、如果我们在form窗体添加一个button控件,这个控件的点击事件代码如下:

 private void button1_Click(object sender, EventArgs e)
        {
            this.userControl11.tishi();
        }

运行的结果是弹出提示框,而我们想点击三次用户控件的button才弹出提示框,所以这是一个不足。不需要操作用户控件,就可以直接调用委托,这是不安全的。

 

2、如果在form的加载事件中,为委托添加委托链:

 private void Form1_Load(object sender, EventArgs e)
        {
            this.userControl11.tishi = TishiForm;

          this.userControl11.tishi += TishiForm1;

           this.userControl11.tishi += TishiForm2;
        }

  private void TishiForm()
        {
            MessageBox.Show("您点击了三次Form1按钮!");
        }

  private void TishiForm1()
        {
            MessageBox.Show("您点击了三次Form1按钮11111!");
        }

  private void TishiForm2()
        {
            MessageBox.Show("您点击了三次Form1按钮22222!");
        }

当点击用户控件的button时会提示每个方法中的内容。

而如果在form窗体添加一个button控件,这个控件的点击事件代码如下:

 private void button1_Click(object sender, EventArgs e)
        {
           this.userControl11.tishi = TishiForm2;
        }

再次点击用户控件中的按钮时,只会提示第三个方法中的内容。在外部可以改变委托指向的方法,把以前的方法给覆盖了,这样是安全隐患,

这也是不足。

解决方法见由委托说明事件的由来2。

 

 

 

这篇关于由委托说明事件的由来1的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1079000

相关文章

C#如何动态创建Label,及动态label事件

《C#如何动态创建Label,及动态label事件》:本文主要介绍C#如何动态创建Label,及动态label事件,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C#如何动态创建Label,及动态label事件第一点:switch中的生成我们的label事件接着,

Tomcat版本与Java版本的关系及说明

《Tomcat版本与Java版本的关系及说明》:本文主要介绍Tomcat版本与Java版本的关系及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Tomcat版本与Java版本的关系Tomcat历史版本对应的Java版本Tomcat支持哪些版本的pythonJ

C#基础之委托详解(Delegate)

《C#基础之委托详解(Delegate)》:本文主要介绍C#基础之委托(Delegate),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 委托定义2. 委托实例化3. 多播委托(Multicast Delegates)4. 委托的用途事件处理回调函数LINQ

Nginx指令add_header和proxy_set_header的区别及说明

《Nginx指令add_header和proxy_set_header的区别及说明》:本文主要介绍Nginx指令add_header和proxy_set_header的区别及说明,具有很好的参考价... 目录Nginx指令add_header和proxy_set_header区别如何理解反向代理?proxy

JAVA SE包装类和泛型详细介绍及说明方法

《JAVASE包装类和泛型详细介绍及说明方法》:本文主要介绍JAVASE包装类和泛型的相关资料,包括基本数据类型与包装类的对应关系,以及装箱和拆箱的概念,并重点讲解了自动装箱和自动拆箱的机制,文... 目录1. 包装类1.1 基本数据类型和对应的包装类1.2 装箱和拆箱1.3 自动装箱和自动拆箱2. 泛型2

C# 委托中 Invoke/BeginInvoke/EndInvoke和DynamicInvoke 方法的区别和联系

《C#委托中Invoke/BeginInvoke/EndInvoke和DynamicInvoke方法的区别和联系》在C#中,委托(Delegate)提供了多种调用方式,包括Invoke、Begi... 目录前言一、 Invoke方法1. 定义2. 特点3. 示例代码二、 BeginInvoke 和 EndI

MySQL常见的存储引擎和区别说明

《MySQL常见的存储引擎和区别说明》MySQL支持多种存储引擎,如InnoDB、MyISAM、MEMORY、Archive、CSV和Blackhole,每种引擎有其特点和适用场景,选择存储引擎时需根... 目录mysql常见的存储引擎和区别说明1. InnoDB2. MyISAM3. MEMORY4. A

MyBatis的配置对象Configuration作用及说明

《MyBatis的配置对象Configuration作用及说明》MyBatis的Configuration对象是MyBatis的核心配置对象,它包含了MyBatis运行时所需的几乎所有配置信息,这个对... 目录MyBATis配置对象Configuration作用Configuration 对象的主要作用C

spring @EventListener 事件与监听的示例详解

《spring@EventListener事件与监听的示例详解》本文介绍了自定义Spring事件和监听器的方法,包括如何发布事件、监听事件以及如何处理异步事件,通过示例代码和日志,展示了事件的顺序... 目录1、自定义Application Event2、自定义监听3、测试4、源代码5、其他5.1 顺序执行

在Dockerfile中copy和add的区别及说明

《在Dockerfile中copy和add的区别及说明》COPY和ADD都是Dockerfile中用于文件复制的命令,但COPY仅用于本地文件或目录的复制,不支持自动解压缩;而ADD除了复制本地文件或... 目录在dockerfile中,copy 和 add有什么区别?COPY 命令ADD 命令总结在Doc