C#事件中關(guān)于sender的用法解讀
C#事件sender的小用法
開WPF新坑了,看了WPF的炫酷界面,再看看winForm實(shí)在是有些慘不忍睹(逃)。后面會(huì)開始寫一些短的學(xué)習(xí)筆記。
一、什么是sender
sender最常見到的情況就是下圖參數(shù)列表中的這個(gè)了…可能平時(shí)沒多少注意。
private void Button_Click(object sender, RoutedEventArgs e)
{
//……blahblahblah
}sender我們很容易猜到肯定是例子中觸發(fā)單擊事件的那個(gè)button控件,它類型是object。C#里的繼承關(guān)系是所有類的基類,萬物基于object(滑稽),所以控件同樣也是繼承與object的,所以將sender進(jìn)行類型轉(zhuǎn)換就能直接得到觸發(fā)事件的控件對(duì)象。
private void Button_Click(object sender, RoutedEventArgs e)
{
Button btn = (Button)sender;
btn.Content = "我被點(diǎn)擊了";
}將sender 進(jìn)行類型轉(zhuǎn)換后,就能夠直接對(duì)button1的屬性進(jìn)行更改,所以 sender是當(dāng)前 觸發(fā)事件的控件。


二、小用法
知道了sender是什么后,我們就可以開始加以小小的應(yīng)用了。
我首先想到的就是,當(dāng)有多個(gè)控件需要觸發(fā)相同的事件時(shí),使用sender來獲取當(dāng)前觸發(fā)事件的控件,可以在同一個(gè)方法中進(jìn)行事件的響應(yīng),能夠使代碼的重用性提高,也能更簡潔
下面用一個(gè)小小的例子來解釋(當(dāng)然這個(gè)只是我暫時(shí)先想到的應(yīng)用)。

界面很簡單,按照以往的設(shè)計(jì)習(xí)慣,需要將兩個(gè)button的單擊事件分開來寫,彈出是誰被點(diǎn)擊的提示。而現(xiàn)在可以利用sender實(shí)現(xiàn)只用一個(gè)button_Click事件,就可以顯示是誰被點(diǎn)擊了。
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 被點(diǎn)擊了");
}
else
{
MessageBox.Show("Btn2 被點(diǎn)擊了");
}
}
}
}單擊后的效果應(yīng)該都能想到了,就不貼圖了。
應(yīng)該sender 的應(yīng)用還很多,突然發(fā)現(xiàn)以前都沒有注意到的小東西,利用起來還是很有用的。
C#事件中sender和e參數(shù)的理解
sender是事件源,表示觸發(fā)事件的那個(gè)組件,比如說你按下按鈕,那么sender就是按鈕EventArgs是事件參數(shù),比如說你用鼠標(biāo)點(diǎn)擊窗體,那么EventArgs是會(huì)包含點(diǎn)擊的位置等等,它用來輔助你處理事件。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
WPF+WriteableBitmap實(shí)現(xiàn)高性能曲線圖的繪制
這篇文章主要為大家詳細(xì)介紹了如何利用WPF+WriteableBitmap實(shí)現(xiàn)高性能曲線圖的繪制,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以嘗試一下2022-08-08
C#實(shí)現(xiàn)六大設(shè)計(jì)原則之接口隔離原則
這篇文章介紹了C#實(shí)現(xiàn)六大設(shè)計(jì)原則之接口隔離原則的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-02-02
C#網(wǎng)絡(luò)爬蟲代碼分享 C#簡單的爬取工具
這篇文章主要為大家詳細(xì)介紹了C#網(wǎng)絡(luò)爬蟲代碼,教大家如何制作了簡單的爬取工具,感興趣的小伙伴們可以參考一下2016-07-07
C# OpenVINO讀取百度模型實(shí)現(xiàn)印章檢測
這篇文章主要為大家詳細(xì)介紹了C# OpenVINO如何通過直接讀取百度模型實(shí)現(xiàn)印章檢測,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-12-12
C# Dynamic之:ExpandoObject,DynamicObject,DynamicMetaOb的應(yīng)用(下)
本篇文章是對(duì)C#中ExpandoObject,DynamicObject,DynamicMetaOb的應(yīng)用進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05
對(duì)int array進(jìn)行排序的實(shí)例講解
下面小編就為大家分享一篇對(duì)int array進(jìn)行排序的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2017-12-12

