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ā)事件的控件對象。
private void Button_Click(object sender, RoutedEventArgs e)
{
Button btn = (Button)sender;
btn.Content = "我被點(diǎn)擊了";
}將sender 進(jìn)行類型轉(zhuǎn)換后,就能夠直接對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)文章
C#實(shí)現(xiàn)繪制浮雕圖片效果實(shí)例
這篇文章主要介紹了C#實(shí)現(xiàn)繪制浮雕圖片效果實(shí)例,是C#程序設(shè)計(jì)中非常實(shí)用的一個(gè)功能,需要的朋友可以參考下2014-08-08
C#實(shí)現(xiàn)websocket雙向通信的示例代碼
本文基于WebSocketSharp實(shí)現(xiàn)了websocket雙向通信,除基本的客戶端向服務(wù)端發(fā)送消息外,也支持客戶端向指定的客戶端發(fā)送消息、群發(fā)消息,其他協(xié)議可自定義,廢話不多說,直接上干貨,需要的朋友可以參考下2024-06-06
基于WPF實(shí)現(xiàn)PDF的顯示與轉(zhuǎn)換
這篇文章為大家詳細(xì)主要介紹了如何基于WPF實(shí)現(xiàn)PDF的顯示并轉(zhuǎn)換成圖片,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-12-12
C#控制臺(tái)程序的開發(fā)與打包為一個(gè)exe文件實(shí)例詳解
所謂控制臺(tái)程序,就是沒有界面,運(yùn)行程序后只有一個(gè)黑色的類似cmd窗口,通過這個(gè)窗口進(jìn)行交互,下面這篇文章主要給大家介紹了關(guān)于C#控制臺(tái)程序的開發(fā)與打包為一個(gè)exe文件的相關(guān)資料,需要的朋友可以參考下2023-05-05
C#面向?qū)ο筇卣鞯木唧w實(shí)現(xiàn)及作用詳解
所有的面相對象思想,歸根結(jié)底是為了簡化代碼,減少代碼量,構(gòu)建更符合現(xiàn)實(shí)生活邏輯的程序代碼,從而減輕程序員的負(fù)擔(dān)。不能一味地或者說刻意地去使用面相對象的思想而忽略了程序所實(shí)現(xiàn)的功能或者框架,要根據(jù)實(shí)際情況2013-10-10

