ImageVerifierCode 换一换
格式:DOC , 页数:11 ,大小:38KB ,
资源ID:3514718      下载积分:20 文钱
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,省得不是一点点
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.wenke99.com/d-3514718.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(程序运行中添加控件并对控件操作.doc)为本站会员(sk****8)主动上传,文客久久仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知文客久久(发送邮件至hr@wenke99.com或直接QQ联系客服),我们立即给予删除!

程序运行中添加控件并对控件操作.doc

1、我们可以看到如下代码:this.button1.Click += new System.EventHandler(this.button1_Click);实际上这段代码,也就是所谓的事件注册代码。该代码的意思是:如果 this.button1 的 Click 事件发生之后,就转向 this. button1_Click 方法进行处理。为了更好的理解事件的注册过程,我们先第 42 行代码进行修改,如下图所示:这里,我们将原来的this.button1.Click += new System.EventHandler(this.button1_Click);修改为this.button1.Clic

2、k = new System.EventHandler(this.button1_Click);在这个程序里,这里的修改是为了更好理解,当然这种写法是语法错误的。下面我们对其进行分析:首先,观察“=”右面的表达式。new System.EventHandler(this.button1_Click);通过 6.1.1 一节中的说明,大家可以发现,这段代码实际上是建立了一个委托类型的实例,并让该委托指向了 this.button1_Click 方法。也就是说,在程序运行的“某一时刻” ,系统会通过这个委托实例间接的调用 this.button1_Click 方法。然后,我们再来观察“=”左面的表

3、达示。在 C 风格的语言中“=”是赋值表达式,也就是说,“=”两侧表达式的数据类型应该是一样的。因此,既然“=”右侧的表达式是一个委托类型(System.EventHandler)的实例,那么 this.button1.Click 也应该是一个委托类型(System.EventHandler)。通过上面的说明,我们得到一个信息,前面这段事件注册代码,是让 this.button1.Click 和System.EventHandler(this.button1_Click)指向了同一段内存空间,简单来讲,就是让 this.button1.Click 指向了this.button1_Click 方

4、法,调用了 this.button1.Click,就相当于调用了 this.button1_Click 方法。因此,我们说,当this.button1 的 Click 事件发生之后,方法 this.button1_Click就会被调用。在程序运行的时候,系统会自己检测 this.button1 是否被点击了,如果被点击了,就在 button1 的内部调用 button1.Click,这时,Windows 窗口中的 button1_Click 方法就会被执行。当然,事件注册代码完全可以手写。因为,除了控件中事件注册代码是自动生成以外,其他类中的事件注册都是手写的。手工注册事件的方法如下:首先,可

5、以在事件发生之前的任何代码中添加事件(通常是在窗口的构造方法中),下面我们来手工注册 button1 的 MouseMove事件,如下图所示:当我们写完“=”时,会出现一个提示 “Press TAB to insert”,这时,我们只需要按 2 下“TAB”键,事件的注册以及用于回调的方法,就会自己添加到代码窗口里,如下图所示:自动生成的代码是将 this.button1 的 MouseMove 事件指向了button1_MouseMove 方法。这样手写的代码和 IDE 自动生成的代码是完全一样的。当然,作为控件的事件,我们完全可以自动生成,如果想自动生成button1 的其他事件,只需要查

6、看 button1 的属性窗口,并点击“”按钮,就会出现该控件的事件列表,如下图所示:然后双击你想要的事件,代码就会自动生成了。在前的面代码中为了更好理解事件注册,我们曾将this.button1.Click += new System.EventHandler(this.button1_Click);修改为this.button1.Click = new System.EventHandler(this.button1_Click);我们会发现,无论是自己写的事件注册代码,还是自动生成的代码,都是使用“+=”来实现的,实际上,作为事件注册的代码,我们仅仅能够使用“+=”来实现注册,简单的使用

7、 “=”是语法错误的!“+=”操作符在 C 风格语言中是常用的操作符,比如int i=0;i+=1;等同于int i=0;i=i+1;因此,this.button1.Click += new System.EventHandler(this.button1_Click);在原则上等同于this.button1.Click = this.button1.Click +new System.EventHandler(this.button1_Click);用自然语言来描述上面的代码就是“一个委托=这个委托本身+另外一个委托”。那么委托相加意味着什么呢?在 6.1.3 一节中,我们讨论过 Multi

8、Delegate(多播委托),而事件本身也是委托,并且所有委托都是 System.MultiDelegate 类的派生类,在 6.1.3 中,我们曾经演示过,多个委托类型实例相加,就是将这些委托实例存放在一个多播委托的调用链中,当调用多播委托时,该多播委托的调用链中的所有委托都会顺序的被调用。利用多播委托的原理,我们可以将多个方法注册给一个事件,如下所示:this.button1.Click +=new System.EventHandler(this.button1_Click);this.button1.Click +=new System.EventHandler(this.button

9、1_Click1);this.button1.Click +=new System.EventHandler(this.button1_Click2);上面的代码,就将三个方法注册到了 button1 的 Click 事件中,当button1 的 Click 事件触发之后,方法button1_Click,button1_Click1,button1_Click2 将会被顺序调用。这样作的好处是,我们可以将多个功能以及逻辑完全独立的操作放在不同的方法中,当事件发生之后,这些方法将会顺序的被调用,以实现我的需要的级联操作。6.2.3 控件中事件的回调方法说完了事件的注册,下面我们来谈一下事件的回调

10、方法。首先,我们还要再一次回顾事件注册的代码:this.button1.Click +=new System.EventHandler(this.button1_Click);上面代码中,使用“new System.EventHandler(this.button1_Click)”将一个System.EventHandler 委托类型的实例指向了this.button1_Click 方法。通过 6.1.1 一节中所谈到的内容,我们知道,如果想让一个委托指向一个方法,那么该委托以及所被指向的方法一定要具备相同的签名(Signature ,具备相同的参数列表,相同的返回值)。因此,System.E

11、ventHandler 类型和this.button1_Click 方法具备相同的签名,下面,我们来看一下System.EventHandler 委托的签名是什么样的:public delegate void EventHandler(Object sender,EventArgs e)System.EventHandler 的签名是:返回值为 void;有两个参数,Object sender, EventArgs e。因此 button1_Click 方法也具备相同形式,代码如下:private void button1_Click(object sender, EventArgs e)实际

12、上,我们所能够看到的事件回调方法的签名基本上都着不多,只不过第二个参数略有区别,下面,我们对该方法的参数进行说明。 Object sender从该参数的命名上,可以看出其作用,sender(发送者)的意思是:谁触发的这个事件,那么 sender 就是谁,由于所有的类型在理论上讲都可以包括事件,因此 sender 的类型被定义成 Object 类型,当多个事件同时指向一个事件回调方法的时候,通过该参数可以区分出是哪一个类触发的事件,以便做出不同的处理,此时,需要对参数 sender 作出类型转化。l 案例操作 020603:多个事件指向同一个回调方法首先,添加三个 Button,一个 TextB

13、ox界面如下:然后,在主窗口中添加一个方法 ButtonClick,这三个按钮的 Click事件将调用该方法。代码如下:protected void ButtonClick(object sender, EventArgs e)Button bt = sender as Button;this.textBox1.Text =“我是:“+ bt.Text;上面代码中,为了知道点击的是哪个按钮,我们将 sender 转化成了 Button 类型。下面来指定这三个按钮的 Click 事件回调方法首先,切换到 button1 的属性窗口(F4),点击“” 按钮,找到“Click”事件,并设置所调用的方

14、法名为 ButtonClick ,如下图所示。然后,以相同的方法设置 button2,button3 的 Click 事件,并它们都指向 ButtonClick 方法。最后,运行程序,下面是运行情况:点击 button1:shenqiboyprivate int count;/用于计数,添加了多少个按钮private void btn_addButtons_Click(object sender, System.EventArgs e)/ 计数,计算目前是添加的几个按钮count+;/ 计算待添加按钮的位置int localY = this.btn_addButtons.Height * co

15、unt;int localX = 10 * count;Button toAddButton = new Button();/ 设置待添加按钮的属性toAddButton.Name=“Button “ + count;toAddButton.Text=“ 按钮“ + count + “ “;toAddButton.Location= new Point(localX, localY); / 设置待添加按钮的事件/ MouseEnter 当鼠标指针进入控件时/ MouseLeave 当鼠标指针离开控件时toAddButton.MouseEnter += new System.EventHandl

16、er(this.btn_MouseEnter);toAddButton.MouseLeave += new System.EventHandler(this.btn_MouseLeave);toAddButton.Click += new System.EventHandler(this.btn_Click);/ 把控件添加到窗口中this.Controls.Add(toAddButton);private void btn_MouseEnter(object sender, System.EventArgs e)/ unboxingButton currentButton = (Button

17、)sender;/ 设置鼠标的背景颜色currentButton.BackColor = Color.Blue; private void btn_MouseLeave(object sender, System.EventArgs e)/unboxingButton currentButton = (Button)sender;/ 设置鼠标的背景颜色currentButton.BackColor = System.Windows.Forms.Control.DefaultBackColor;private void btn_Click(object sender, System.EventArgs e)/ unboxingButton currentButton = (Button)sender;

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。