由委托说明事件的由来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

相关文章

Go语言中make和new的区别及说明

《Go语言中make和new的区别及说明》:本文主要介绍Go语言中make和new的区别及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1 概述2 new 函数2.1 功能2.2 语法2.3 初始化案例3 make 函数3.1 功能3.2 语法3.3 初始化

java中新生代和老生代的关系说明

《java中新生代和老生代的关系说明》:本文主要介绍java中新生代和老生代的关系说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、内存区域划分新生代老年代二、对象生命周期与晋升流程三、新生代与老年代的协作机制1. 跨代引用处理2. 动态年龄判定3. 空间分

MySQL之InnoDB存储引擎中的索引用法及说明

《MySQL之InnoDB存储引擎中的索引用法及说明》:本文主要介绍MySQL之InnoDB存储引擎中的索引用法及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录1、背景2、准备3、正篇【1】存储用户记录的数据页【2】存储目录项记录的数据页【3】聚簇索引【4】二

mysql中的数据目录用法及说明

《mysql中的数据目录用法及说明》:本文主要介绍mysql中的数据目录用法及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、版本3、数据目录4、总结1、背景安装mysql之后,在安装目录下会有一个data目录,我们创建的数据库、创建的表、插入的

C++11委托构造函数和继承构造函数的实现

《C++11委托构造函数和继承构造函数的实现》C++引入了委托构造函数和继承构造函数这两个重要的特性,本文主要介绍了C++11委托构造函数和继承构造函数的实现,具有一定的参考价值,感兴趣的可以了解一下... 目录引言一、委托构造函数1.1 委托构造函数的定义与作用1.2 委托构造函数的语法1.3 委托构造函

Maven中的profiles使用及说明

《Maven中的profiles使用及说明》:本文主要介绍Maven中的profiles使用及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录主要用途定义 Profiles示例:多环境配置激活 Profiles示例:资源过滤示例:依赖管理总结Maven 中的

Before和BeforeClass的区别及说明

《Before和BeforeClass的区别及说明》:本文主要介绍Before和BeforeClass的区别及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Before和BeforeClass的区别一个简单的例子当运行这个测试类时总结Before和Befor

Python pip下载包及所有依赖到指定文件夹的步骤说明

《Pythonpip下载包及所有依赖到指定文件夹的步骤说明》为了方便开发和部署,我们常常需要将Python项目所依赖的第三方包导出到本地文件夹中,:本文主要介绍Pythonpip下载包及所有依... 目录步骤说明命令格式示例参数说明离线安装方法注意事项总结要使用pip下载包及其所有依赖到指定文件夹,请按照以

Spring中管理bean对象的方式(专业级说明)

《Spring中管理bean对象的方式(专业级说明)》在Spring框架中,Bean的管理是核心功能,主要通过IoC(控制反转)容器实现,下面给大家介绍Spring中管理bean对象的方式,感兴趣的朋... 目录1.Bean的声明与注册1.1 基于XML配置1.2 基于注解(主流方式)1.3 基于Java

idea报错java: 非法字符: ‘\ufeff‘的解决步骤以及说明

《idea报错java:非法字符:‘ufeff‘的解决步骤以及说明》:本文主要介绍idea报错java:非法字符:ufeff的解决步骤以及说明,文章详细解释了为什么在Java中会出现uf... 目录BOM是什么?1. BOM的作用2. 为什么会出现 \ufeff 错误?3. 如何解决 \ufeff 问题?最