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

相关文章

Zookeeper安装和配置说明

一、Zookeeper的搭建方式 Zookeeper安装方式有三种,单机模式和集群模式以及伪集群模式。 ■ 单机模式:Zookeeper只运行在一台服务器上,适合测试环境; ■ 伪集群模式:就是在一台物理机上运行多个Zookeeper 实例; ■ 集群模式:Zookeeper运行于一个集群上,适合生产环境,这个计算机集群被称为一个“集合体”(ensemble) Zookeeper通过复制来实现

禁止平板,iPad长按弹出默认菜单事件

通过监控按下抬起时间差来禁止弹出事件,把以下代码写在要禁止的页面的页面加载事件里面即可     var date;document.addEventListener('touchstart', event => {date = new Date().getTime();});document.addEventListener('touchend', event => {if (new

git使用的说明总结

Git使用说明 下载安装(下载地址) macOS: Git - Downloading macOS Windows: Git - Downloading Windows Linux/Unix: Git (git-scm.com) 创建新仓库 本地创建新仓库:创建新文件夹,进入文件夹目录,执行指令 git init ,用以创建新的git 克隆仓库 执行指令用以创建一个本地仓库的

log4j2相关配置说明以及${sys:catalina.home}应用

${sys:catalina.home} 等价于 System.getProperty("catalina.home") 就是Tomcat的根目录:  C:\apache-tomcat-7.0.77 <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5p %c{1}:%L - %msg%n" /> 2017-08-10

android应用中res目录说明

Android应用的res目录是一个特殊的项目,该项目里存放了Android应用所用的全部资源,包括图片、字符串、颜色、尺寸、样式等,类似于web开发中的public目录,js、css、image、style。。。。 Android按照约定,将不同的资源放在不同的文件夹中,这样可以方便的让AAPT(即Android Asset Packaging Tool , 在SDK的build-tools目

FreeRTOS内部机制学习03(事件组内部机制)

文章目录 事件组使用的场景事件组的核心以及Set事件API做的事情事件组的特殊之处事件组为什么不关闭中断xEventGroupSetBitsFromISR内部是怎么做的? 事件组使用的场景 学校组织秋游,组长在等待: 张三:我到了 李四:我到了 王五:我到了 组长说:好,大家都到齐了,出发! 秋游回来第二天就要提交一篇心得报告,组长在焦急等待:张三、李四、王五谁先写好就交谁的

【经验交流】修复系统事件查看器启动不能时出现的4201错误

方法1,取得『%SystemRoot%\LogFiles』文件夹和『%SystemRoot%\System32\wbem』文件夹的权限(包括这两个文件夹的所有子文件夹的权限),简单点说,就是使你当前的帐户拥有这两个文件夹以及它们的子文件夹的绝对控制权限。这是最简单的方法,不少老外说,这样一弄,倒是解决了问题。不过对我的系统,没用; 方法2,以不带网络的安全模式启动,运行命令行,输入“ne

Adblock Plus官方规则Easylist China说明与反馈贴(2015.12.15)

-------------------------------特别说明--------------------------------------- 视频广告问题:因Adblock Plus的局限,存在以下现象,优酷、搜狐、17173黑屏并倒数;乐视、爱奇艺播放广告。因为这些视频网站的Flash播放器被植入了检测代码,而Adblock Plus无法修改播放器。 如需同时使用ads

BT天堂网站挂马事件后续:“大灰狼”远控木马分析及幕后真凶调查

9月初安全团队披露bt天堂网站挂马事件,该网站被利用IE神洞CVE-2014-6332挂马,如果用户没有打补丁或开启安全软件防护,电脑会自动下载执行大灰狼远控木马程序。 鉴于bt天堂电影下载网站访问量巨大,此次挂马事件受害者甚众,安全团队专门针对该木马进行严密监控,并对其幕后真凶进行了深入调查。 一、“大灰狼”的伪装 以下是10月30日一天内大灰狼远控的木马样本截图,可以看到该木马变种数量不

列举你能想到的UNIX信号,并说明信号用途

信号是一种软中断,是一种处理异步事件的方法。一般来说,操作系统都支持许多信号。尤其是UNIX,比较重要应用程序一般都会处理信号。 UNIX定义了许多信号,比如SIGINT表示中断字符信号,也就是Ctrl+C的信号,SIGBUS表示硬件故障的信号;SIGCHLD表示子进程状态改变信号;SIGKILL表示终止程序运行的信号,等等。信号量编程是UNIX下非常重要的一种技术。 Unix信号量也可以