C#事件中關(guān)于sender的用法解讀
C#事件sender的小用法
開WPF新坑了,看了WPF的炫酷界面,再看看winForm實在是有些慘不忍睹(逃)。后面會開始寫一些短的學(xué)習(xí)筆記。
一、什么是sender
sender最常見到的情況就是下圖參數(shù)列表中的這個了…可能平時沒多少注意。
private void Button_Click(object sender, RoutedEventArgs e) { //……blahblahblah }
sender我們很容易猜到肯定是例子中觸發(fā)單擊事件的那個button控件,它類型是object。C#里的繼承關(guān)系是所有類的基類,萬物基于object(滑稽),所以控件同樣也是繼承與object的,所以將sender進行類型轉(zhuǎn)換就能直接得到觸發(fā)事件的控件對象。
private void Button_Click(object sender, RoutedEventArgs e) { Button btn = (Button)sender; btn.Content = "我被點擊了"; }
將sender 進行類型轉(zhuǎn)換后,就能夠直接對button1的屬性進行更改,所以 sender是當(dāng)前 觸發(fā)事件的控件。
二、小用法
知道了sender是什么后,我們就可以開始加以小小的應(yīng)用了。
我首先想到的就是,當(dāng)有多個控件需要觸發(fā)相同的事件時,使用sender來獲取當(dāng)前觸發(fā)事件的控件,可以在同一個方法中進行事件的響應(yīng),能夠使代碼的重用性提高,也能更簡潔
下面用一個小小的例子來解釋(當(dāng)然這個只是我暫時先想到的應(yīng)用)。
界面很簡單,按照以往的設(shè)計習(xí)慣,需要將兩個button的單擊事件分開來寫,彈出是誰被點擊的提示。而現(xiàn)在可以利用sender實現(xiàn)只用一個button_Click事件,就可以顯示是誰被點擊了。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; namespace WPFLittleTips { /// /// MainWindow.xaml 的交互邏輯 /// public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } private void btnObj1_Click(object sender, RoutedEventArgs e) { Button btn = (Button)sender; if(btn == btnObj1) { MessageBox.Show("Btn1 被點擊了"); } else { MessageBox.Show("Btn2 被點擊了"); } } } }
單擊后的效果應(yīng)該都能想到了,就不貼圖了。
應(yīng)該sender 的應(yīng)用還很多,突然發(fā)現(xiàn)以前都沒有注意到的小東西,利用起來還是很有用的。
C#事件中sender和e參數(shù)的理解
sender
是事件源,表示觸發(fā)事件的那個組件,比如說你按下按鈕,那么sender就是按鈕EventArgs
是事件參數(shù),比如說你用鼠標(biāo)點擊窗體,那么EventArgs是會包含點擊的位置等等,它用來輔助你處理事件。
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
WPF+WriteableBitmap實現(xiàn)高性能曲線圖的繪制
這篇文章主要為大家詳細(xì)介紹了如何利用WPF+WriteableBitmap實現(xiàn)高性能曲線圖的繪制,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以嘗試一下2022-08-08C#網(wǎng)絡(luò)爬蟲代碼分享 C#簡單的爬取工具
這篇文章主要為大家詳細(xì)介紹了C#網(wǎng)絡(luò)爬蟲代碼,教大家如何制作了簡單的爬取工具,感興趣的小伙伴們可以參考一下2016-07-07C# Dynamic之:ExpandoObject,DynamicObject,DynamicMetaOb的應(yīng)用(下)
本篇文章是對C#中ExpandoObject,DynamicObject,DynamicMetaOb的應(yīng)用進行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05