日韩天天综合网_野战两个奶头被亲到高潮_亚洲日韩欧美精品综合_av女人天堂污污污_视频一区**字幕无弹窗_国产亚洲欧美小视频_国内性爱精品在线免费视频_国产一级电影在线播放_日韩欧美内地福利_亚洲一二三不卡片区

.NET圖像界面按鈕的clicked事件淺談_.Net教程

編輯Tag賺U幣

推薦:Asp.net中使用PageDataSource分頁實現(xiàn)代碼
這篇文章主要介紹asp.net中使用PageDataSource分頁的方法,需要的朋友可以參考下

但是事件并不局限于圖像界面,也可能是滿足程序的某個邏輯判斷觸發(fā)了事件。引發(fā)事件的對象叫做事件發(fā)送方,捕獲事件并對其做出響應(yīng)的對象叫做事件接收方。但是事件發(fā)送方并不知道哪個對象或者方法會處理它引發(fā)的事件,所以需要在事件發(fā)送方和事件接收方之間存在一媒介,明確某個對象或者某個類型的某個方法會對這個事件進行響應(yīng)。.NET用委托作為事件發(fā)送方與事件接收方之間的媒介,委托只有一個簽名,只要方法簽名與委托簽名匹配的方法,都可以聲明自己對這個委托類型的事件的感興趣,接收并處理它。
事件發(fā)送方的對象為了給事件接收對象傳遞一些額外信息,就需要寫一個派生于System.EventArgs的類,封裝一些數(shù)據(jù)。

復(fù)制代碼 代碼如下:www.hl5o.cn

public class DrawEventArgs:EventArgs
{
privatedouble m_Size;
public DrawEventArgs(doublesize)
{
m_Size = size;
}
public double Size
{
get
{
returnm_Size;
}
}
}

下面聲明一委托,該委托有兩個參數(shù),一個是參數(shù)代表事件的發(fā)送方,另一個是參數(shù)是該事件封裝的數(shù)據(jù)。
public delegate void ShapeSizeChanged(objectsender,DrawEventArgs e);
ShapeSizeChanged的實例可以綁定到任何和它方法簽名匹配的方法上。
下面是自定義事件委托,
public event ShapeSizeChanged SizeChanged;
下面是一個負責(zé)引發(fā)事件的類型代碼,
復(fù)制代碼 代碼如下:www.hl5o.cn

public class DrawManager
{
public event ShapeSizeChangedSizeChanged;
protectedvoid OnSizeChanged(DrawEventArgse)
{
ShapeSizeChangedtemp = SizeChanged;
//是否有委托與該事件關(guān)聯(lián)
if(temp != null)
{
temp(this,e);
}
}
public void SizeChange(doublesize)
{
DrawEventArgse = new DrawEventArgs(size);
OnSizeChanged(e);
}
}


而后定義兩個監(jiān)聽事件的類型,
復(fù)制代碼 代碼如下:www.hl5o.cn

public class Square
{
publicSquare(DrawManager drawManager)
{
//drawManager.SizeChanged+= DrawSquare;
//把事件關(guān)聯(lián)到委托上
drawManager.SizeChanged += new ShapeSizeChanged(DrawSquare);
}
public void DrawSquare(objectsender, DrawEventArgs e)
{
Console.WriteLine(string.Format("TheSquare'Length = {0}", e.Size));
}
public void Detach(DrawManagerdrawManager)
{
//drawManager.SizeChanged-= DrawSquare;
//解除事件和委托的關(guān)聯(lián)
drawManager.SizeChanged -= new ShapeSizeChanged(DrawSquare);
}
}
public class Rectangle
{
publicRectangle(DrawManager drawManager)
{
drawManager.SizeChanged +=DrawRectangle;
}
public void DrawRectangle(objectsender, DrawEventArgs e)
{
Console.WriteLine(string.Format("TheRectangle'length={0} and width={1}.",e.Size*2,e.Size));
}
public void Detach(DrawManagerdrawManager)
{
drawManager.SizeChanged -=DrawRectangle;
}
}

測試代碼,
復(fù)制代碼 代碼如下:www.hl5o.cn

class Program
{
static void Main(string[]args)
{
DrawManagerdrawManager = new DrawManager();
Rectanglerect = new Rectangle(drawManager);
Squaresquare = new Square(drawManager);
//引發(fā)事件
drawManager.SizeChange(5);

//解除監(jiān)聽事件
square.Detach(drawManager);
drawManager.SizeChange(10);
Console.ReadLine();
}
}
/*運行結(jié)果
The Rectangle'length=10 and width=5.
The Square'Length = 5
The Rectangle'length=20 and width=10.
*/

.NET中的事件模式和觀察者模式非常相似,也可謂是觀察者模式在.NET下的進化版吧,下面用觀察者模式實現(xiàn)上面功能以做對比,首先定義兩個接口,IObserver和IObservable,如下
復(fù)制代碼 代碼如下:www.hl5o.cn

public interface IObserver
{
voidNotify(DrawEventArgs e);
}
public interface IObservable
{
voidRegister(IObserver observer);
voidUnRegister(IObserver observer);
}

下面是改寫后的兩個觀察者類,
復(fù)制代碼 代碼如下:www.hl5o.cn

public class NewRectangle:IObserver
{
privateObserverManager m;
publicNewRectangle(ObserverManager oManager)
{
m=oManager;
oManager.Register(this);
}
public void Notify(DrawEventArgse)
{
Console.WriteLine(string.Format("TheRectangle'length={0} and width={1}.", e.Size * 2, e.Size));
}
public void Detach()
{
m.UnRegister(this);
}
}
public class NewSquare:IObserver
{
privateObserverManager m;

publicNewSquare(ObserverManager oManager)
{
m=oManager;
oManager.Register(this);
}
public void Notify(DrawEventArgse)
{
Console.WriteLine(string.Format("TheSquare'Length = {0}.", e.Size));
}
public void Detach()
{
m.UnRegister(this);
}
}

下面是負責(zé)通知觀察者的類型,
復(fù)制代碼 代碼如下:www.hl5o.cn

public class ObserverManager:IObservable
{
protectedArrayList arrList;
publicObserverManager()
{
arrList = newArrayList();
}
public void Register(IObserverobserver)
{
arrList.Add(observer);
}
public void UnRegister(IObserverobserver)
{
if(arrList.Contains(observer))
{
arrList.Remove(observer);
}
}
public void NotifyObservers(doublesize)
{
DrawEventArgse = new DrawEventArgs(size);
foreach(IObserver observer inarrList)
{
observer.Notify(e);
}
}
public void SizeChanged(doublesize)
{
NotifyObservers(size);
}
}

下面是調(diào)用代碼,
復(fù)制代碼 代碼如下:www.hl5o.cn

static void Main(string[]args)
{
ObserverManageroManager = new ObserverManager();
NewRectanglerect = new NewRectangle(oManager);
NewSquaresquare = new NewSquare(oManager);
oManager.SizeChanged(5);
square.Detach();
oManager.SizeChanged(10);
Console.ReadLine();
}

最好運行下代碼,這樣可以更easy的理解這兩種模式微妙的差別了。
對事件來說,還可以顯式的用add和remove編寫事件訪問器,事件訪問器通常有編譯器生成,所以可以顯式的用事件訪問器修改DrawManager類型,
復(fù)制代碼 代碼如下:www.hl5o.cn

public class DrawManager
{
privateevent ShapeSizeChangedm_SizeChanged;
privatereadonly objectm_lock = new object();
public event ShapeSizeChangedSizeChanged
{
add
{
lock(m_lock)
{
m_SizeChanged += value;
}
}
remove
{
lock(m_lock)
{
m_SizeChanged -= value;
}
}
}
protectedvoid OnSizeChanged(DrawEventArgse)
{
ShapeSizeChangedtemp = m_SizeChanged;
//是否有委托與該事件關(guān)聯(lián)
if(temp != null)
{
temp(this,e);
}
}
public void SizeChange(doublesize)
{
DrawEventArgse = new DrawEventArgs(size);
OnSizeChanged(e);
}
}

分享:asp.net中Word轉(zhuǎn)Html的辦法(不需要WORD組件)
最近碰到一個需求,在文本編輯器中實現(xiàn)“Word導(dǎo)入”功能 發(fā)現(xiàn)了幾種方法,只是作為總結(jié)使用

來源:模板無憂//所屬分類:.Net教程/更新時間:2013-04-22
相關(guān).Net教程