C#事件中关于sender的用法解读
作者:Rhine404 发布时间:2022-09-30 20:28:39
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
猜你喜欢
- 一般情况下是不可以用static修饰类的。如果一定要用static修饰类的话,通常static修饰的是匿名内部类。在一个类中创建另外一个类,
- 一直使用Eclipse环境开发Android,也尝鲜使用过Android Studio去开发,各种IDE配合Android SDK及SDK原
- java 引用类型的数据传递的是内存地址java中引用类型的数据,传递的是内存地址,像类,数组,接口,String等等都是引用类型!看下面的
- 前言:本文主要讲解以c语言编写猜数字游戏,目的是介绍C语言中的循环和分支的具体用法。一:猜数字游戏基本介绍&对程序预期.猜数字游戏,
- 模糊查询Spring Data Jpa的使用可以减少开发者对sql语句的编写,甚至完全不需要编写sql语句。但是,开发过程中总会遇到各种复杂
- 找了半天没有找到postgresql中关于array数组类型的字段如何对应到java中的数据类型,后来找到了mybatis的TypeHand
- 本文实例讲述了Java实现SSL双向认证的方法。分享给大家供大家参考,具体如下:我们常见的SSL验证较多的只是验证我们的服务器是否是真实正确
- 参考链接:狂神的Swagger笔记号称世界上最流行的API框架Restful Api 文档在线自动生成器 => API 文档 与API
- 方案一: 采用reflections 框架(此框架依赖com.google.guava)1、reflections框架地址:https://
- 本文实例讲述了C#实现对Json字符串处理方法,分享给大家供大家参考。具体分析如下:一般对于web应用开发人员来说对Json字符串都会很熟悉
- Mybatis映射文件mapper.xml的注释问题从昨天夜晚9点到今天中午,一直被项目bug所困惑,中间这段时间一直未解决这个问题,也咨询
- Java 1.0 IO系统介绍1 Java IO版本Java库的IO分为输入/输出两部分。早期的Java 1.0版本的输入系统是InputS
- 本文主要介绍了Java实现雪花算法(snowflake),分享给大家,具体如下:简单描述最高位是符号位,始终为0,不可用。41位的时间序列,
- 本文实例为大家分享了C#仿Windows XP自带的扫雷游戏的具体代码,供大家参考,具体内容如下1 题目描述:模仿Windows XP自带的
- 嵌套表格,即在一张表格中的特定单元格中再插入一个或者多个表格,使用嵌套表格的优点在于能够让内容的布局更加合理,同时也方便程序套用。下面的示例
- 堆区:只存放类对象,线程共享;方法区:又叫静态存储区,存放class文件和静态数据,线程共享;栈区:存放方法局部变量,基本类型变量区、执行环
- 目录Java 中线程池创建的几种方式🐱🏍Executors 工厂方法创建👏 new ThreadPoolExecutor() 自
- 前言:JSON 是轻量级的数据交换格式,很常用,尤其是在使用 Ajax 时,在后台将数据封装为 JSON 字符串更是常见。之前在做项目的时候
- 在项目中有一个需求是需要在局域网内跨PC远程调用一个程序,并且要求有界面显示,调查了一些资料,能实现远程调用的.Net技术大概有PsExec
- Java序列化是将一个对象编码成一个字节流,反序列化将字节流编码转换成一个对象。 序列化是