认识委托和事件
最近在自定義控件中做了個DropDownList的聯動事件,具體的要求就是選擇起始日期的年、月份和截止日期年、月份保持一樣,避免起始日期大于截止日期。
--------------------------------分割線----------------------------------------
首先就要明白以下幾個知識點:
委托
事件
AutoPostBack
AutoPostBack是通過讓控件提交表單后讓服務器回傳控件信息的屬性,將它設置為true的時候,顯而易見的,在網頁上點擊該控件后,網頁會有一個刷新的動作。如果把這個動作過程回傳的控件信息用作聯動,再好不過。所以我需要給自定義控件的兩個子DropDownList控件設置該屬性。
委托是一個類,它定義了方法的類型,使得可以將方法當作另一個方法的參數來進行傳遞,這種將方法動態地賦給參數的做法,可以避免在程序中大量使用If-Else(Switch)語句,同時使得程序具有更好的可擴展性。
那么委托是個什么樣子呢?
namespace ConsoleApplication1 {class Class1{delegate void myde(int a, int b);static void Main(string[] args){Class1 cd = new Class1();myde mydel=cd.add;mydel(cd.getInt1(1),cd.getInt2(2));}public int getInt1(int a){return a;}public int getInt2(int b){return b;}public void add(int a, int b){Console.WriteLine(a-b);Console.ReadKey();}}}輸出 -1;跟add方法的操作一樣。
?
當它和事件組合的時候又有另一種不同的用法:
先看個概述:
namespace ConsoleApplication1 {class Class1{public delegate void myEventDe(object sender, EventArgs e);public event myEventDe myEvent;static void Main(string[] args){Class1 cd = new Class1();cd.myEvent += new myEventDe(myUse);EventArgs e=new EventArgs();cd.myEvent(cd,e);}static void myUse(object sender, EventArgs e){Console.WriteLine("觸發了事件");Console.ReadKey();}}}
?這就是事件的概況。
???????
public delegate void OnSelectChangedHandle(object sender,DateEventArgs e);public event OnSelectChangedHandle DateSelectChanged;
而事件中的兩個參數:sender和e不是一成不變的,他們可以隨意定義。同時可以將兩個事件的不同結果同時加到一個事件中去。所以我給自定義的DateEvenArgs類設為兩個參數,分別記錄年和月。
protected void Years_SelectedIndexChanged(object sender, EventArgs e){if (DateSelectChanged != null)DateSelectChanged(this, new DateEventArgs(this.Years.SelectedValue,this.Months));}protected void Month_SelectedIndexChanged(object sender, EventArgs e){if (DateSelectChanged != null)DateSelectChanged(this, new DateEventArgs(this.Years.SelectedValue, this.Months));}public void ChangeDate(string year, string month){Month.SelectedValue = month;Years.SelectedValue = year;}由于我重新定義了一個事件類叫做 DateEvenArgs,所以我還必須新建一個類:
public class DateEventArgs : EventArgs{private string dateYear;private string dateMonth;public string selectDateValue;public DateEventArgs(string i,string j){this.dateYear = i;this.dateMonth = j;this.selectDateValue = i + j;}public string SelectDateValue{get { return selectDateValue; }}}終于,我在自定義控件中自定義的事件做好了。
然后剩下在應用控件的頁面用委托注冊出事件,在事件中做出業務邏輯需要的判斷,自定義控件的自定義事件就這么做好了。
轉載于:https://www.cnblogs.com/JhoneLee/archive/2013/03/01/2939146.html
總結
- 上一篇: 项目复盘模板
- 下一篇: 共享几套silverlight2 too