說明(2018-4-9 20:11:42):this
1. 先自定義了一個登陸控件,能夠輸入帳號、密碼,點擊登陸。而後在Form1裏面拖入這個控件,要求輸入帳號密碼正確時,點擊登陸,控件顯示綠色,不然顯示紅色。spa
2. 用事件來把控件裏的帳號和密碼傳值給Form1窗體,能夠省略委託的定義過程那一行代碼(public delegete void MyDel())直接用public event EventHandler MyEve。.net
3. 與委託的不一樣在於,事件裏有兩個參數(object sender, EventArgs e),sender用this就能夠,e的話,要本身建一個類MyEventArgs,繼承EventArgs,用它的屬性來傳遞參數(帳號、密碼)。code
4. 在Form1裏的MyEve綁定的方法裏,須要把e替換成mea,否則獲取不到傳過來的參數(帳號、密碼),MyEventArgs mea = e as MyEventArgs;就是這句代碼。orm
5. 最後一點,若是是讓把Form1整個窗體改變顏色,在Form1的綁定方法裏直接this.BackColor賦值就能夠了。若是是隻讓控件改變顏色,就須要返回一個bool值,讓控件本身判斷。例子中是給MyEventArgs類增長一個IsOK屬性,而且初始值設爲False,在Form1中判斷登陸成功的同時,講IsOK的值設爲True,在控件中改變顏色。視頻
ucLogin.cs(控件代碼):blog
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 _07事件作的登陸案例 { public partial class ucLogin : UserControl { public ucLogin() { InitializeComponent(); } //1.定義事件
public event EventHandler MyEve; private void btnOK_Click(object sender, EventArgs e) { MyEventArgs mea = new MyEventArgs(); mea.Name = txtName.Text; mea.Pwd = txtPwd.Text; //3.調用事件
if (MyEve != null) { MyEve(this, mea); } if (mea.IsOK == true) { this.BackColor = Color.Green; MessageBox.Show("登陸成功"); } else { this.BackColor = Color.Red; MessageBox.Show("登陸失敗"); } } } //聲明一個MyEventArgs類存放帳號、密碼、是否登錄成功,三個參數
public class MyEventArgs : EventArgs { //構造方法,使IsOK初始值爲false
public MyEventArgs() { IsOK = false; } public string Name { get; set; } public string Pwd { get; set; } public bool IsOK { get; set; } } }
Form1.cs(主窗體代碼):繼承
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 _07事件作的登陸案例 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { //2.綁定事件 //兩下tab鍵自動生成ucLogin1_MyEve方法
ucLogin1.MyEve += ucLogin1_MyEve; } void ucLogin1_MyEve(object sender, EventArgs e) { //這句是最重要的,要把e強轉爲MyEventArgs類型!
MyEventArgs mea = e as MyEventArgs; if (mea.Name == "123" && mea.Pwd == "123") { //這個是把整個Form1改變顏色,比較簡單。如今的代碼是把「是否登錄成功」的信息返回,改變控件的顏色。 //this.BackColor = Color.Green; //MessageBox.Show("登陸成功");
mea.IsOK = true; } else { //this.BackColor = Color.Red; //MessageBox.Show("登陸失敗"); //這個不用給IsOK賦值,默認就是false
} } } }
運行效果:事件
1. 登陸失敗:get
2. 登錄成功:
總結:
1. 終於找到一個詳細講解事件這兩個參數應用的視頻了,21期->.net核心透析->2015.1.5基礎增強,我以爲我快要悟道了^_^。
2. 再把窗體傳值那個用事件實現一下。