網站首頁 編程語言 正文
C#事件sender的小用法
開WPF新坑了,看了WPF的炫酷界面,再看看winForm實在是有些慘不忍睹(逃)。后面會開始寫一些短的學習筆記。
一、什么是sender
sender最常見到的情況就是下圖參數列表中的這個了…可能平時沒多少注意。
private void Button_Click(object sender, RoutedEventArgs e) { //……blahblahblah }
sender我們很容易猜到肯定是例子中觸發單擊事件的那個button控件,它類型是object。C#里的繼承關系是所有類的基類,萬物基于object(滑稽),所以控件同樣也是繼承與object的,所以將sender進行類型轉換就能直接得到觸發事件的控件對象。
private void Button_Click(object sender, RoutedEventArgs e) { Button btn = (Button)sender; btn.Content = "我被點擊了"; }
將sender 進行類型轉換后,就能夠直接對button1的屬性進行更改,所以 sender是當前 觸發事件的控件。
二、小用法
知道了sender是什么后,我們就可以開始加以小小的應用了。
我首先想到的就是,當有多個控件需要觸發相同的事件時,使用sender來獲取當前觸發事件的控件,可以在同一個方法中進行事件的響應,能夠使代碼的重用性提高,也能更簡潔
下面用一個小小的例子來解釋(當然這個只是我暫時先想到的應用)。
界面很簡單,按照以往的設計習慣,需要將兩個button的單擊事件分開來寫,彈出是誰被點擊的提示。而現在可以利用sender實現只用一個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 的應用還很多,突然發現以前都沒有注意到的小東西,利用起來還是很有用的。
C#事件中sender和e參數的理解
-
sender
是事件源,表示觸發事件的那個組件,比如說你按下按鈕,那么sender就是按鈕 -
EventArgs
是事件參數,比如說你用鼠標點擊窗體,那么EventArgs是會包含點擊的位置等等,它用來輔助你處理事件。
原文鏈接:https://blog.csdn.net/qq_34802416/article/details/77859268
相關推薦
- 2022-11-29 Android?Jetpack組件DataBinding詳解_Android
- 2022-05-11 在 WebStorm 中誤添加自定義的 HTML 屬性,如何刪除
- 2023-07-13 替換字符串中的任意字符及正則隱藏手機號中間四位
- 2023-05-07 pytest多重斷言的實現_python
- 2022-07-22 用C語言根據天數輸出對應的年、月、日
- 2022-05-13 Android 10 讀寫文件權限
- 2021-12-13 VS在調試時,查看是DEBUG/RELEASE
- 2021-09-25 Flutter實現底部彈窗效果_Android
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支