C#winform最简单的方法就是拖控件,然后双击控件生成默认的事件。再此双击生成的只是事件的方法,事件的订阅在form.desigener.cs中,如 this.DBSelectBTN.Click += new System.EventHandler(this.DBSelectBTN_Click);。C#winform编程采用预处理机制,所谓预处理机制就是事件的发布订阅都已经处理完成,只需要使用者定义事件对应的方法即可。以button的click为例,事件发布早已经提前处理完成,即EventHandler,事件的订阅在使用者双击控件时完成(所以在通过类定义控件而不是拖动控件时,需要自己对click事件进行订阅)。而事件的触发条件就是用户对空间进行点击时,这个触发条件由C#进行监听,当点击时触发。以button为例,双击生成的方法由两个参数,如private void TestBtn_Click(object sender, EventArgs e)中的object和eventargs,其中eventargs为事件数据类,其他事件数据类继承自此类如KeyEventArgs,是C#预定义的获取键盘事务的类,即C#通过此类获取key值。

通过以下例子来模拟C#预处理事件,此例子中请忽略类的名字。

   class Program
{
/// <summary>
/// 模拟C#button click事件或者textbox 的keypress事件来更好的理解相关功能
/// C#对事件进行了预处理,在Button类的父类中定义了click事件
/// 在winform上添加事件时,其实添加的是一个方法,在form.cs中对此事件进行了订阅
/// C#对事件的发布以及触发事件的方法以及事件的订阅进行了预处理,使用者只需要完善订阅事件的方法
/// 两个参数 object sender,EventArgs e也已经进行了预处理
/// sender参数的理解:以button.click事件为例,触发事件时参数可以为click(this(或者Btn),new EventArgs()),其中Btn为Button类的一个实例
/// e参数的理解:以KeyEventArgs为例,此类继承自EventArgs类,C#通过此类获取相关输入设备的输入值;
/// </summary>
/// <param name="args"></param>
static void Main(string[] args)
{
//模拟C#内部获取相应输入数据
string str = Console.ReadLine();
char a = str[];
KeyEventArgs e = new KeyEventArgs(a); TextBox tbx = new TextBox();
textBox1 tbx1 = new textBox1(tbx);
tbx.Run(e);
Console.WriteLine(tbx.Text);
Console.ReadKey(); }
}
/// <summary>
/// 模拟C#预处理的KeyEventArgs类
/// 此类也可以不用继承EventArgs,只是用来模拟C#,C#中事件数据类都继承自此数据基类
/// </summary>
class KeyEventArgs:EventArgs
{
private char keyChar; public KeyEventArgs(char keyChar) //来模拟C#获取键盘数据
{
this.keyChar = keyChar;
} public char KeyChar
{
get { return keyChar; }
}
}
/// <summary>
/// 模拟C#预处理的TextBox类
/// </summary>
class TextBox
{
public delegate void KeyEventHandler(object sender, KeyEventArgs e);
public event KeyEventHandler keypress;//发布事件 //模拟textbox的text属性
public string Text
{
get;set;
} //定义触发事件的方法,模拟C#内部触发事件的方法
public void Run(KeyEventArgs e)
{
if(keypress!=null)
{
keypress(this, e);//此处this为TextBox
}
}
}
/// <summary>
/// 此部分为订阅事件以及订阅事件的方法,此类中的方法为用户自己操作的部分
/// </summary>
class textBox1
{
//订阅事件
public textBox1(TextBox tbx)
{
tbx.keypress += new TextBox.KeyEventHandler(Show);
}
//订阅事件的方法
public void Show(object sender, KeyEventArgs e)
{
TextBox tb = (TextBox)sender;
tb.Text = e.KeyChar.ToString();
}
}

下面例子我们来模拟button类。

    /// <summary>
/// 模拟button类
/// </summary>
class myButton
{
//只模拟click事件
public delegate void clickEventHandler(object sender, EventArgs e);
public event clickEventHandler click;//发布click事件 //click 触发的条件
//通过此布尔值来模拟C#对鼠标单击时的事件监听,当为true时表示单击完成
public void Onclick(bool clicked)
{
EventArgs e = null;
if (clicked)
{
//if(click!=null)
//{
// click(this, e);
//}
click?.Invoke(this, e); }
}
}
class Program
{
static void Main(string[] args)
{
myButton button1 = new myButton();
button1.click += new myButton.clickEventHandler(button1_click);//委托为静态的,必须用类名引用 EventArgs e=null;
bool clicked = true;//表示进行单击
button1.Onclick(clicked);
Console.ReadKey();
} //----------------------------------------------------//
//此方法的名字纯粹是为了模拟双击控件时默认的方法名字
static void button1_click(object sender,EventArgs e)
{
Console.WriteLine("这是单击时触发的方法");
}
}

虚线一上部分即为C#为我们处理好 的部分,我们只需要拖动控件,生成button_click方法。

这是C#的预处理事件机制。简单模拟一下。

最新文章

  1. django+mysql学习笔记
  2. Linux学习心得之 Linux下ant安装与使用
  3. Android 手机卫士--设置密码对话框
  4. 二模10day1解题报告
  5. cocos中使用VS自动创建工程的方法
  6. Oracle错误
  7. 段落排版--行间距, 行高(line-height)
  8. [python语法巩固][leetcode326][Power of Three]
  9. 介绍Python程序员常用的IDE和其它开发工具
  10. 【HDFS】相关概念及常用命令
  11. 例10-4 uva10791(唯一分解)
  12. this.state.menuList.toArray()[0].get(&#39;id&#39;)
  13. 51nod--1212 最小生成树
  14. 洗礼灵魂,修炼python(45)--巩固篇—【转载】类的__now__和__init__
  15. java基础-Idea开发工具介绍
  16. 继承Tcalendar控件,让当天日期醒目显示
  17. SQL SERVER C#数据库操作类(连接、执行SQL)
  18. 用C语言的rand()和srand()产生伪随机数的方法总结
  19. Vue系列——在vue项目中使用echarts
  20. 使用openssl生成双向加密证书(转)

热门文章

  1. 品Spring:SpringBoot发起bean定义注册的“二次攻坚战”
  2. wait()与notify()
  3. python学习笔记之zipfile模块
  4. springboot 集成swagger2
  5. &lt;反向传播(backprop)&gt;梯度下降法gradient descent的发展历史与各版本
  6. 基于微信小程序云开发实现的婚礼邀请函模板,可自行定制开发
  7. 50个实用的jq代码段整理
  8. mac下ip地址重定向
  9. [经验分享]C# 操作Windows系统计划任务
  10. 前端深入之css篇丨2020年前,彻底掌握css动画【transition】