《1》
在解决方案中添加一个windows窗体应用程序 取名为“事件演示” 然后添加一个“自定义控件”取名为UCLogin.cs
一下是vs 项目图:
然后拖入两个lable 和两个TextBox,和一个Button 控件到这个UCLogin.cs自定义控件里 如图:
然后我们生成一下解决方案 ,这样就自制了一个用户自定义的用户登陆控件
既然它是一个自定义的用户登陆控件,那么在任何一个窗体中就可以拖入这个用户控件使用。可是不同的窗体在用户点击自定义登陆控件中的“登陆”的时候验证都有可能不一样,比如在这里窗体里,我通过连接数据库来验证登陆,而在另外一个窗体中,通过读取文件来验证.......等等。
于是我们想到在用户点击登陆的时候,我让她执行一个事件(委托)
<pre name="code" class="csharp">using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace 事件演示
{
public partial class UCLogin : UserControl
{
public UCLogin()
{
InitializeComponent();
}
//定义一个用户登陆校验事件
public event Action<object, UserLoginEventArgs> Loginvalidate;
//当用户点击“登陆”的时候出发button1_Click这个事件,执行这个方法,然后再这个方法里去执行我们的Loginvalidate
private void button1_Click(object sender, EventArgs e)
{
//---------------在这里执行用户登陆校验-----------------//
//验证登陆
if (Loginvalidate != null)
{
UserLoginEventArgs evtObj = new UserLoginEventArgs();
evtObj.UserName = txtUserName.Text.Trim();
evtObj.Passwrod = txtPassword.Text.Trim();
evtObj.isOk = false;
//----------执行Loginvalidate事件-----------//
//this就是表示触发Loginvalidate这个事件的控件本身
//例如:双击button按钮,触发了button1_Click事件,那么this就表示button按钮本身
Loginvalidate(this, evtObj); //this表示触发事件的当前对象,即UCLogin这个自定义控件
//这里就是表示如果用户登陆成功,执行什么操作。
if (evtObj.isOk)
{
this.BackColor = Color.Yellow; //如果登陆成功,将自定义登陆控件的背景色设为黄色
}
else
{
this.BackColor = Color.Red; //如果登陆失败,就将自定义登陆控件的背景色设为红色
}
}
}
}
/// <summary>
/// 这个类的主页作用是将UCLogin这个控件对象的私有字段值传递给Form1窗体类
/// </summary>
public class UserLoginEventArgs:EventArgs
{
/// <summary>
/// 登陆用户名
/// </summary>
public string UserName { get; set; }
/// <summary>
/// 登陆密码
/// </summary>
public string Passwrod { get; set; }
/// <summary>
/// 是否登陆成功
/// </summary>
public bool isOk { get; set; }
}
}
好了,以上就把一个用户登陆的自定义控件设置好了。下面我们来看看怎么使用这个自定义用户登陆控件
我们打开From1窗体,在工具箱中的最上面,将我们的自定义用户登陆控件拖到我们的From1窗体中来,如下图:
双击一下From1窗体
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 事件演示
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();//
}
private void Form1_Load(object sender, EventArgs e)
{
//ucLogin1.Loginvalidate += new Action(UserLoginValidate); 一般我们简写成下面的那样就可以了
ucLogin1.Loginvalidate += UserLoginValidate;
}
//事件校验方法
private void UserLoginValidate(object sender,UserLoginEventArgs e)
{
if (e.UserName == "张三" && e.Passwrod == "123456")
{
e.isOk = true;//如果用户名与密码都正确,就将isOk设置为true,表示登陆成功
}
}
}
}
好了。大功告成 我们来运行一下这个程序吧!!!