C#_event_事件
2015-11-27 13:55
465 查看
//-------------------事件---------------------------
自声明的参数类
//--------------------利用事件实现登录验证 和 利用接口来实现登录验证的对比----------
---在开始之前,我们来添加一个用户自定义控件,叫UCLogInValidate.cs 类似这样的:
点击登录按钮 编辑其click事件:
这里使用了系统自带的Func委托 带这么多参数看着很挫 稍后我们再使用Action ,这里先用着 和接口对比下
//自定义控件修改之后 记得重新生成
对于暴露的LogInValidate 我们在Form1加载时赋值方法:
好吧我知道这个验证好搓。。
注册好方法后点击自定义的控件中的登录就可以验证了。
下面我们来看看用接口来实现:
//----使用接口来实现登录
添加用户自定义控件 同上
在自定义控件中 编写 登录方法:
这里就没再使用 event,定义了一个ILogInValidateable接口变量, 其声明如下:
//注意接口定义 接口中方法前不能加修饰符 默认 隐式公开
也定义了MyEventArgs类型 用来传递参数 ,其声明如下 :(也可以使其继承自EventArgs)
然后拖拽此控件 在Form登录时 注册方法:
因为_iUserValidate是接口类型 赋值是 实现该接口的子类型对象: Validating声明如下:
好吧,这验证也很搓,无视之^_~..
接下来验证就可以了:
什么?弱智的验证?
Never mind~
//Func参数太多?使用Action实现方法 就如上 传递自定义参数
public event Action<object sender,MyEventArgs e> _userValidate;
噢了~
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace _04委托案例2_LogIn { public class LogInEventArgs { private string _userName; public string UserName { get { return _userName; } set { _userName = value; } } private string _userPwd; public string UserPwd { get { return _userPwd; } set { _userPwd = value; } } private bool _isValidateOK; public bool IsValidateOK { get { return _isValidateOK; } set { _isValidateOK = value; } } } }
自声明的参数类
//--------------------利用事件实现登录验证 和 利用接口来实现登录验证的对比----------
---在开始之前,我们来添加一个用户自定义控件,叫UCLogInValidate.cs 类似这样的:
点击登录按钮 编辑其click事件:
//声明事件 本质就是将此委托私有,然后公有出两个方法 += -= public event Func<string, string, bool> LogInValidate; private void button1_Click(object sender, EventArgs e) { string userName = textBox1.Text.Trim(); string userPassword = textBox2.Text.Trim(); if (LogInValidate != null) { bool bo=LogInValidate(userName, userPassword); if (bo) { this.BackColor = Color.Green; } else { this.BackColor = Color.Red; } } }
这里使用了系统自带的Func委托 带这么多参数看着很挫 稍后我们再使用Action ,这里先用着 和接口对比下
//自定义控件修改之后 记得重新生成
对于暴露的LogInValidate 我们在Form1加载时赋值方法:
private void ucLogIn1_Load(object sender, EventArgs e) { ucLogIn1.LogInValidate += ucLogIn1_LogInValidate; } bool ucLogIn1_LogInValidate(string arg1, string arg2) { return (arg1 == "cheng" && arg2 == "123") ? true : false; }
好吧我知道这个验证好搓。。
注册好方法后点击自定义的控件中的登录就可以验证了。
下面我们来看看用接口来实现:
//----使用接口来实现登录
添加用户自定义控件 同上
在自定义控件中 编写 登录方法:
//定义接口 public ILogInValidateable _iUserValidate; private void button1_Click(object sender, EventArgs e) { //1.收集信息 MyEventArgs arg = new MyEventArgs(); arg.IsValidateOK = false; arg.UserName = textBox1.Text.Trim(); arg.UserPassword = textBox2.Text.Trim(); //2.调用接口验证 _iUserValidate.UserValidate(this, arg); //通过对接口赋值 (实现该接口的子类对象) 调用的就是子类对象的方法 if (arg.IsValidateOK) { this.BackColor = Color.Green; } else { this.BackColor = Color.Red; } }
这里就没再使用 event,定义了一个ILogInValidateable接口变量, 其声明如下:
public interface ILogInValidateable { void UserValidate(object sender, MyEventArgs e); }
//注意接口定义 接口中方法前不能加修饰符 默认 隐式公开
也定义了MyEventArgs类型 用来传递参数 ,其声明如下 :(也可以使其继承自EventArgs)
/// <summary> /// 为了传递参数而设计的类 /// </summary> public class MyEventArgs { private bool _isValidateOK; public bool IsValidateOK { get { return _isValidateOK; } set { _isValidateOK = value; } } private string _userName; public string UserName { get { return _userName; } set { _userName = value; } } private string _userPassword; public string UserPassword { get { return _userPassword; } set { _userPassword = value; } } }
然后拖拽此控件 在Form登录时 注册方法:
private void ucLogInValidate1_Load(object sender, EventArgs e) { ucLogInValidate1._iUserValidate = new Validating(); }
因为_iUserValidate是接口类型 赋值是 实现该接口的子类型对象: Validating声明如下:
public class Validating : ILogInValidateable { public void UserValidate(object sender, MyEventArgs e) { if (e.UserName == "Xuqingchi" && e.UserPassword == "HHHHH") { e.IsValidateOK = true; } else { e.IsValidateOK = false; } } }
好吧,这验证也很搓,无视之^_~..
接下来验证就可以了:
什么?弱智的验证?
Never mind~
//Func参数太多?使用Action实现方法 就如上 传递自定义参数
public event Action<object sender,MyEventArgs e> _userValidate;
噢了~
相关文章推荐
- 客户端(C#)调用CXF搭建的webservice的出现一些问题记录
- C# Attribute(中)——Attribute本质论
- C#操作word文档
- C#拾遗-接口与抽象类
- C# Attribute (上)——Attribute初体验
- C#3.0之神奇的Lambda表达式和Lambda语句
- 【NCRE】——c#判断ppt中的艺术字
- c# 类中使用ResolveUrl
- C#里WinForm开发中如何实现控件随窗体大小的改变而自动适应其改变
- C#比较二个数组并找出相同或不同元素的方法
- C#Chart属性
- C#实现XSL转换的方法
- C# 托盘程序 实例 双击显示窗体,最小化到托盘
- C# 托盘程序
- C#实现DataTable映射成Model的方法(附源码)
- C# 编写Windows Service(windows服务程序)(第二种)
- C#实现托盘程序并禁止多个应用实例运行的方法
- c# 鼠标拖动缩放图片
- c# 鼠标拖动缩放图片
- C# 中的委托与事件