C#事件中關于sender的用法解讀
C#事件sender的小用法
開WPF新坑了,看了WPF的炫酷界面,再看看winForm實在是有些慘不忍睹(逃)。后面會開始寫一些短的學習筆記。
一、什么是sender
sender最常見到的情況就是下圖參數(shù)列表中的這個了…可能平時沒多少注意。
private void Button_Click(object sender, RoutedEventArgs e) { //……blahblahblah }
sender我們很容易猜到肯定是例子中觸發(fā)單擊事件的那個button控件,它類型是object。C#里的繼承關系是所有類的基類,萬物基于object(滑稽),所以控件同樣也是繼承與object的,所以將sender進行類型轉換就能直接得到觸發(fā)事件的控件對象。
private void Button_Click(object sender, RoutedEventArgs e) { Button btn = (Button)sender; btn.Content = "我被點擊了"; }
將sender 進行類型轉換后,就能夠直接對button1的屬性進行更改,所以 sender是當前 觸發(fā)事件的控件。
二、小用法
知道了sender是什么后,我們就可以開始加以小小的應用了。
我首先想到的就是,當有多個控件需要觸發(fā)相同的事件時,使用sender來獲取當前觸發(fā)事件的控件,可以在同一個方法中進行事件的響應,能夠使代碼的重用性提高,也能更簡潔
下面用一個小小的例子來解釋(當然這個只是我暫時先想到的應用)。
界面很簡單,按照以往的設計習慣,需要將兩個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 被點擊了"); } } } }
單擊后的效果應該都能想到了,就不貼圖了。
應該sender 的應用還很多,突然發(fā)現(xiàn)以前都沒有注意到的小東西,利用起來還是很有用的。
C#事件中sender和e參數(shù)的理解
sender
是事件源,表示觸發(fā)事件的那個組件,比如說你按下按鈕,那么sender就是按鈕EventArgs
是事件參數(shù),比如說你用鼠標點擊窗體,那么EventArgs是會包含點擊的位置等等,它用來輔助你處理事件。
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
WPF+WriteableBitmap實現(xiàn)高性能曲線圖的繪制
這篇文章主要為大家詳細介紹了如何利用WPF+WriteableBitmap實現(xiàn)高性能曲線圖的繪制,文中的示例代碼講解詳細,感興趣的小伙伴可以嘗試一下2022-08-08C# Dynamic之:ExpandoObject,DynamicObject,DynamicMetaOb的應用(下)
本篇文章是對C#中ExpandoObject,DynamicObject,DynamicMetaOb的應用進行了詳細的分析介紹,需要的朋友參考下2013-05-05