当在点击一个按钮执行某个操作时,你有没有想过,为什么点击了这个按钮就会执行某个操作,这是为什么?那么接下来就让我来解开这里面的秘密。
用微软中定义的事件函数来说明这个问题是再简单不过的的事情了。
首先,点击按钮是一个事件,也就是说,当你点击了按钮就相当于是触发了一个事件,学过C#窗体编程的同学都知道,事件是其中常用一个属性,按钮的触发就使用了这个属性。
不闲谈了,解决实际的问题。
将按钮的整个过程分开为两个过程,1.按钮点击事件发生。2.执行事件函数,完成相应的操作。可以想象一下,这两个过程在分开时都可以方便地实现,第一条只需要创建一个按钮点击区域,来检测鼠标或触碰是否在本按钮区域之内即可,第二条也只需要创建一个事件处理函数即可。关键是怎样在这两点之间架起一个传递信息的桥梁,事件发生时怎样调用事件处理函数。
接下来是干货,话不多说直接上代码:
这是一个窗体程序,实现的基本工能是,创建一个按钮Button,创建一个文本输入框TextBox,创建一个显示文本条Label。程序中预先设置好一个体重基础值weight。当在文本中输入一个数值后,点击button按钮,程序内部判断这个值是大于原先设置的值,还是小于原先设置的值,如果大于原先设置的值就在label中显示“小明变胖了,现在的体重是”同时再把这个值给这个给weight。如果小于这个值就显示“小明变瘦了,现在体重是”同时把这个值给weight。借这个程序来说明按钮的执行本质。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace _13._6
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public delegate void WeightChangedEventHandler(object sender, EventArgs e);
class Woman
{
#region 构造函数
public Woman(string n,int a,double w)
{
_name = n;
_age = a;
_weight = w;
}
#endregion
#region 事件
public event WeightChangedEventHandler GetFatter;
public event WeightChangedEventHandler GetThinner;
#endregion
#region 属性
private string _name;
public string Name1
{
get
{
return _name;
}
set
{
_name = value;
}
}
private int _age;
public int Age
{
get
{
return _age;
}
set
{
if (value < 15 || value > 60)
{
throw new ArgumentOutOfRangeException("输入的年龄不合理");
}
_age = value;
}
}
private double _weight;
public double Weight
{
get
{
return _weight;
}
set
{
if (value < 30 || value > 200)
{
throw new ArgumentOutOfRangeException("输入的体重不合适");
}
double originalWeight = _weight;
_weight = value;
if (value > originalWeight)
{
if (GetFatter != null)
{
GetFatter(this, EventArgs.Empty);
}
}
else
{
if (value < originalWeight)
{
if (GetThinner != null)
{
GetThinner(this, EventArgs.Empty);
}
}
}
}
}
#endregion
}
Woman mary;
private void Form1_Load(object sender, EventArgs e)
{
mary = new Woman("小明", 23, 64.5f);
mary.GetFatter += new WeightChangedEventHandler(GetfatterHandler);
mary.GetThinner += GetthinnerHandler;
System.Console.WriteLine("说明此处是 代码加载时执行的");
}
private void GetfatterHandler(object sender,EventArgs e)
{
Woman woman = (Woman)sender;
textBox2.AppendText(woman.Name1 + "变胖了,现在体重" + woman.Weight + "kg.\r\n");
}
private void GetthinnerHandler(object sender,EventArgs e)
{
Woman woman = (Woman)sender;
textBox2.AppendText(woman.Name1 + "变瘦了,现在体重" + woman.Weight + "kg.\r\n");
}
private void button(object sender, EventArgs e)
{
double d;
if(double.TryParse(textBox1.Text,out d))
{
try
{
mary.Weight = d;
}
catch (ArgumentOutOfRangeException) { }
}
}
}
}
在weight属性中可以发现调用了事件处理函数,在Form1_Load(object sender, EventArgs e)函数中将对应的事件发生时要执行的函数加载到自身的函数上,这一步才是整个按钮执行的关键一步,这一步利用了事件的装订,来触发相应的事件执行函数。这个函数是在函数执行时直接加载执行的函数。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)