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

相关文章

Redis中哨兵机制和集群的区别及说明

《Redis中哨兵机制和集群的区别及说明》Redis哨兵通过主从复制实现高可用,适用于中小规模数据;集群采用分布式分片,支持动态扩展,适合大规模数据,哨兵管理简单但扩展性弱,集群性能更强但架构复杂,根... 目录一、架构设计与节点角色1. 哨兵机制(Sentinel)2. 集群(Cluster)二、数据分片

Springboot项目构建时各种依赖详细介绍与依赖关系说明详解

《Springboot项目构建时各种依赖详细介绍与依赖关系说明详解》SpringBoot通过spring-boot-dependencies统一依赖版本管理,spring-boot-starter-w... 目录一、spring-boot-dependencies1.简介2. 内容概览3.核心内容结构4.

redis和redission分布式锁原理及区别说明

《redis和redission分布式锁原理及区别说明》文章对比了synchronized、乐观锁、Redis分布式锁及Redission锁的原理与区别,指出在集群环境下synchronized失效,... 目录Redis和redission分布式锁原理及区别1、有的同伴想到了synchronized关键字

MySQL 临时表创建与使用详细说明

《MySQL临时表创建与使用详细说明》MySQL临时表是存储在内存或磁盘的临时数据表,会话结束时自动销毁,适合存储中间计算结果或临时数据集,其名称以#开头(如#TempTable),本文给大家介绍M... 目录mysql 临时表详细说明1.定义2.核心特性3.创建与使用4.典型应用场景5.生命周期管理6.注

Java中数组与栈和堆之间的关系说明

《Java中数组与栈和堆之间的关系说明》文章讲解了Java数组的初始化方式、内存存储机制、引用传递特性及遍历、排序、拷贝技巧,强调引用数据类型方法调用时形参可能修改实参,但需注意引用指向单一对象的特性... 目录Java中数组与栈和堆的关系遍历数组接下来是一些编程小技巧总结Java中数组与栈和堆的关系关于

mybatis-plus QueryWrapper中or,and的使用及说明

《mybatis-plusQueryWrapper中or,and的使用及说明》使用MyBatisPlusQueryWrapper时,因同时添加角色权限固定条件和多字段模糊查询导致数据异常展示,排查发... 目录QueryWrapper中or,and使用列表中还要同时模糊查询多个字段经过排查这就导致只要whe

SpringBoot改造MCP服务器的详细说明(StreamableHTTP 类型)

《SpringBoot改造MCP服务器的详细说明(StreamableHTTP类型)》本文介绍了SpringBoot如何实现MCPStreamableHTTP服务器,并且使用CherryStudio... 目录SpringBoot改造MCP服务器(StreamableHTTP)1 项目说明2 使用说明2.1

JAVA覆盖和重写的区别及说明

《JAVA覆盖和重写的区别及说明》非静态方法的覆盖即重写,具有多态性;静态方法无法被覆盖,但可被重写(仅通过类名调用),二者区别在于绑定时机与引用类型关联性... 目录Java覆盖和重写的区别经常听到两种话认真读完上面两份代码JAVA覆盖和重写的区别经常听到两种话1.覆盖=重写。2.静态方法可andro

zookeeper端口说明及介绍

《zookeeper端口说明及介绍》:本文主要介绍zookeeper端口说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、zookeeper有三个端口(可以修改)aVNMqvZ二、3个端口的作用三、部署时注意总China编程结一、zookeeper有三个端口(可以

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 初始化