wpf中EventHandler的使用

应用情景:比如点击A界面的a按钮,跳转到B界面了,点击b按钮后,触发了业务逻辑,然后需要回到A界面中执行某一个方法。不是唯一的方法,可以使用别的方法,类似观察者模式,有变化了,就会改变。也可以理解一个界面向另一个界面发送消息。

1.建立一个wpf程序,分别增加上述的界面和按钮以及逻辑,文件预览

2.建立Common类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace EventHandlerWPF
{public static class Common{/// <summary>/// 定义事件/// </summary>public static event EventHandler bChangedEvent;    //使用的地方注册事件public static void B()    //B方法,别的调用{bChangedEvent?.Invoke(null, EventArgs.Empty);   //只要此方法bChangedEvent注册了后,就会触发}}
}

3.MainWindow.xaml.cs代码

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 EventHandlerWPF
{/// <summary>/// MainWindow.xaml 的交互逻辑/// </summary>public partial class MainWindow : Window{public MainWindow(){InitializeComponent();Common.bChangedEvent += Common_bChangedEvent;     //必须注册}private void Button_Click(object sender, RoutedEventArgs e){Window1 b = new Window1();b.ShowDialog();}private void Common_bChangedEvent(object sender, EventArgs e){    //点击B界面的b按钮后,这里首先触发。A();//业务处理}private void A(){MessageBox.Show("我是A");   //业务处理}}
}

4.Window1.xaml.cs

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.Shapes;namespace EventHandlerWPF
{/// <summary>/// Window1.xaml 的交互逻辑/// </summary>public partial class Window1 : Window{public Window1(){InitializeComponent();}private void Button_Click(object sender, RoutedEventArgs e){MessageBox.Show("我是B");   //业务处理Common.B();       //需要向A界面传递值}}
}

5.效果,可见,点击B界面的b按钮,进入了A界面的a方法中

拓展

解析wpf中事件的object和EventArgs

此问题接着上面来说,如果要向事件里面传递参数,要向“真正”的事件那样做,应该如何做呢?其实在winform中也有事件,这个方法不仅WPF可以使用,winform也可以事件,其实都是.net的底层机制构造。

1.项目文件预览

2.Common.cs类

这里还可以使用string,传递一个string或者其他泛型,然后下面去接收,就不用谢继承了。

  public static event EventHandler<string> bChangedEvent;    //使用的地方注册事件
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace EventHandlerWPF
{public static class Common{/// <summary>/// 定义事件/// </summary>public static event EventHandler bChangedEvent;    //使用的地方注册事件public static void B(object sender, B_EventArgs b_EventArgs)    //B方法,别的调用{//补充:事件的参数是object sender, EventArgs e  ,sender就是一个object类型,如果是按钮触发的,就是按钮的本身。bChangedEvent?.Invoke(sender, b_EventArgs);   //只要此方法bChangedEvent注册了后,就会触发}}public class B_EventArgs : EventArgs  //定义EventArgs的参数{public string Name { get; set; }public object obj { get; set; }}}

3.MainWindow.xaml.cs

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 EventHandlerWPF
{/// <summary>/// MainWindow.xaml 的交互逻辑/// </summary>public partial class MainWindow : Window{public MainWindow(){InitializeComponent();Common.bChangedEvent += Common_bChangedEvent;     //必须注册}private void Button_Click(object sender, RoutedEventArgs e){Window1 b = new Window1();b.ShowDialog();}private void Common_bChangedEvent(object sender, EventArgs e){    //点击B界面的b按钮后,这里首先触发。var btn = sender as Button;string name = (e as B_EventArgs).Name; //接收事件的参数object obj = (e as B_EventArgs).obj;A();//业务处理}private void A(){MessageBox.Show("我是A");   //业务处理}}
}

4.Window1.xaml.cs

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.Shapes;namespace EventHandlerWPF
{/// <summary>/// Window1.xaml 的交互逻辑/// </summary>public partial class Window1 : Window{public Window1(){InitializeComponent();}private void Button_Click(object sender, RoutedEventArgs e){MessageBox.Show("我是B");   //业务处理B_EventArgs b_EventArgs = new B_EventArgs();b_EventArgs.Name = "张三";b_EventArgs.obj = "真香";Common.B(b,b_EventArgs);       //需要向A界面传递值      这里的b就是界面b按钮的名字       }}
}

5.效果

调试的时候,在A界面中,可以看到对应的值

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/352924.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

使用Transformer模型进行计算机视觉任务的端对端对象检测

Transformer模型是google团队在2017在论文attention is all you need中提出的一个用于NLP领域的模型,但是随着VIT模型与Swin Transformer模型的发布,把Transformer模型成功应用到计算机视觉任务中。 上期图文,我们使用hugging face的transformers模型进行了VIT模型的对象分…

3、线程通信EventHandler使用

作者&#xff1a;韩茹 公司&#xff1a;程序咖&#xff08;北京&#xff09;科技有限公司 鸿蒙巴士专栏作家 一、使用场景 EventHandler开发场景 EventHandler的主要功能是将InnerEvent事件或者Runnable任务投递到其他的线程进行处理&#xff0c;其使用的场景包括&#xff1a…

ChatGPT市场营销指南震撼出炉,你错过了?!

ChatGPT是一种基于AI技术的语言模型&#xff0c;它可以与用户进行对话和交互。它被广泛应用于各个领域&#xff0c;包括市场营销。作为一名市场营销人员&#xff0c;您可以使用ChatGPT来获得创意、解决问题和生成内容。 下面是190个ChatGPT提示&#xff0c;可帮助营销人员更好…

专业分析┃微电子专业介绍及发展前瞻

不知道提到微电子&#xff0c;你最先想到的是什么&#xff1f;芯片&#xff1f;卡脖子&#xff1f;摩尔定律&#xff1f; 因为近两年芯片被限制的原因&#xff0c;大家经常可以从各路媒体上看到“芯片”一词。微电子作为一个学科&#xff0c;简单的说&#xff0c;就是研究如何…

Cookie和session工作流程详解

目录 cookie机制 session会话 理解会话机制 Servlet中对Cookie和Session提供的 HttpServletrequest类中的方法&#xff1a; 模拟实现登录功能 首先实现功能分为两个界面&#xff1a; &#xff08;1&#xff09;登录页面代码&#xff08;前端代码&#xff09; (2) 编写Lo…

Mac - 鼠标拖尾特效 By CursorEffect2

目录 一.引言 二.安装 CursorEffect2 三.使用 CursorEffect2 四.使用效果 五.内存消耗 六.一键关闭 七.总结 一.引言 在自己搭建的 Hexo 博客上可以定义鼠标点击的特效&#xff0c;如图点击后可以产生彩色的斑点。 于是想着除了浏览 Hexo 博客外&#xff0c;能不能别的也…

MyBatis深入学习总结

MyBatis总结 MyBatis入门操作 简介 原始jdbc操作&#xff08;查询数据&#xff09; 原始jdbc操作&#xff08;插入数据&#xff09; 原始jdbc操作的分析 原始jdbbc开发存在的问题如下&#xff1a; 数据库连接创建、释放频繁造成系统资源的浪费从而影响系统性能sql语句在代…

window11中QQ登录“无法访问个人文件夹”解决方案

window11刚发行不久&#xff0c;安装各种软件或多或少会遇到各种bug&#xff0c;例如安装QQ后&#xff0c;打开时会提醒你“无法访问个人文件夹”而打开QQ失败。 可以通过改变你自己设置的个人文件夹的权限来解决这个问题。 找到文件夹所在位置&#xff0c;右击文件夹&#xf…

QQ登录显示无法访问个人文件夹解决办法

之前QQ登录出错&#xff0c;一直显示无法访问个人文件夹&#xff0c;是否自动修复个人文件权限 直接找到你安装qq的文件路径&#xff0c;右键--》授予访问权限--》删除访问&#xff0c;就可以正常登录了 &#xff01;

如何解决Windows10启动QQ时报错无法访问个人文件夹?

1、首先不要安装其他电脑管家&#xff0c;因为这会使Windows10自带的安全中心出现变化&#xff0c;第一步打开自带安全中心。 2、进入之后找到病毒和威胁防护&#xff0c;进入病毒和威胁防护设置。 3、进入病毒和威胁防护设置后&#xff0c;找到管理受控制文件夹访问权限。 4、…

启动QQ时无法访问个人文件夹XXX,是否自动修复个人文件夹权限

如图 点击确定显示修复权限失败 找到上图显示的文件路径 右键属性 -> 安全 -> 编辑 -> 选中Users -> 勾选完全控制

腾讯QQ登录“无法访问个人文件夹”解决方法

今天&#xff0c;登录QQ时出现“无法访问个人文件夹&#xff0c;个人文件将被保存到我的文档”的问题 上网搜索了一下&#xff0c;还是没有解决问题。然后自己思考了一下&#xff0c;可能与我修改了“我的文档”的路径有关&#xff0c;我刚刚安装的QQ个人文件夹也正好指定放在…

解决QQ显示“无法访问个人文件夹”方法

在qq登录的过程中&#xff0c;显示“无法访问个人文件夹”这样的提示&#xff0c;该怎解决&#xff1f; 尝试过把qq卸载之后重新装&#xff0c;改变一下qq的属性-兼容性&#xff0c;以及管理员的方式运行&#xff0c;查了不少的攻略&#xff0c;始终无法解决&#xff1b; 经过…

Win11 “qq无法访问个人文件夹”解决方法(原创)

今天登QQ&#xff0c;突然弹窗显示“qq无法访问个人文件夹”&#xff0c;网上搜了一堆方法都没用&#xff0c;也不想卸载重装qq&#xff0c;我就寻思是不是文件夹权限的问题。 右键显示的无法访问的个人文件夹&#xff0c;选择“安全”&#xff0c;我把Users的权限选中&#xf…

qq 微信 无法访问个人文件夹

昨天某个时刻开始&#xff0c;QQ会出现所有图片无法加载的状况&#xff0c;微信会出现截图发到聊天框是文件的问题。 一开始不以为然&#xff0c;直到第二天重启电脑发现两个软件都登陆不上去了。对应显示的是标题的关键字&#xff0c;因为问题已经解决就不截图了。 解决方案&…

android 新建桌面文件夹在哪里,添加并管理桌面文件夹

添加并管理桌面文件夹 我们在使用Android手机的时候&#xff0c;随着手机内安装的软件越来越多&#xff0c;比如说笔者的这个手机里&#xff0c;算了一下&#xff0c;一共装了110个应用程序&#xff0c;七个分页&#xff0c;每页显示16个图标。那么在这里我们设想一下&#xff…

Win11QQ无法访问个人文件夹

Win11QQ无法访问个人文件夹 #第一步 找到QQ文件存储的文件夹 #第二步 右键→属性→安全→User→编辑→User→完全控制→确定 #OK了 去试一试吧b(&#xffe3;▽&#xffe3;)d

C盘瘦身:QQ文件的清理及Group2文件夹

目录 问题解决方法 Windows 10 20H2 TIM 问题 最近C盘被撑爆了 使用SpaceSniffer一扫发现QQ的文件中有个Group2文件夹占了我17G 但使用QQ自带的个人文件夹清理却扫不到&#xff0c;据说直接删除会丢失近期所有群聊的聊天图片 解决方法 在这个地方找到了大神fsz1987给出的…

QQ个人文件夹保存位置无效

必须写文章谴责QQ这种垃圾软件 B 了 dog&#xff0c;腾讯家的QQ真没几个好用的。之前是PC版QQ群文件跳转回来显示错误bug&#xff0c;之后是手机QQ看点等各种消息bug&#xff0c;现在隔了几年了还有“个人文件夹保存位置无效”。根本没有改进&#xff01; QQ个人文件夹保存位…

Javamail使用IMAP同步QQ自定义文件夹问题

前言 最近使用Javamail同步QQ文件夹的时候发现,在QQ web端建立的文件夹,在手机端javamail却抛出FolderNotFoundExcetion的异常,这个困扰我几天了,我一度认为是javamail的bug.直到今天不经意间的一个发现,才解决了这个问题,以此来记录下! 不经意间的发现,验证截图: