个人认为事件处理机制是一种很好的机制

特别是可以方便安全的实现窗口间(子窗口对父窗口,子窗口间等)的消息传递、功能调用

下面展现的源自以前论坛上看到的一套方法,可能记得不大准确,所以可能不规范,我的理解和注释也很可能有谬误

但在实际操作中能满足需求也没有发现异常。

以实现子窗口引起父窗口控件变化为例

父窗口 XAML段

 <Window x:Class="EventTransBetweenFroms.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Label Content="我是主窗口" Height="62" HorizontalAlignment="Left" Margin="151,37,0,0" Name="label1" VerticalAlignment="Top" FontSize="36" Width="201" />
<Label Content="事件已处理" Height="55" HorizontalAlignment="Left" Margin="169,116,0,0" Name="labelMessage" VerticalAlignment="Top" Foreground="Red" FontSize="28" Width="156" Visibility="Hidden" />
<Button Content="子窗口" Height="66" HorizontalAlignment="Left" Margin="213,205,0,0" Name="btnCallChildWnd" VerticalAlignment="Top" Width="70" FontSize="18" Click="btnCallChildWnd_Click" />
</Grid>
</Window>

子窗口XAML段

 <Window x:Class="EventTransBetweenFroms.wndChild"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="wndChild" Height="" Width="">
<Grid>
<Label Content="我是子窗口" FontSize="" Height="" HorizontalAlignment="Left" Margin="43,27,0,0" Name="label1" VerticalAlignment="Top" Width="" />
<Button Content="触发事件" Height="" HorizontalAlignment="Left" Margin="97,111,0,0" Name="btnTriggerEvent" VerticalAlignment="Top" Width="" FontSize="" Click="btnTriggerEvent_Click" />
</Grid>
</Window>

这一部分没什么特别的

现希望子窗口中的点击btnTriggerEvent按钮使父窗口中的labelMessage可见

父窗口代码段

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
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 EventTransBetweenFroms
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
} private void btnCallChildWnd_Click(object sender, RoutedEventArgs e)
{
wndChild wndchild = new wndChild();
wndchild.MyEvent+=new EventHandler(HandleEvent); //添加事件托管,可以理解为注册这个事件,之后才能被响应
                                              //EvntHandler中的参数为响应的函数名
wndchild.Show();
}
private void HandleEvent(object sender, EventArgs e)
{
labelMessage.Visibility = Visibility.Visible;           //响应函数的参数必须为(object sender,EventArgs e)的格式
    }   }  }

子窗口代码段

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
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 EventTransBetweenFroms
{
/// <summary>
/// wndChild.xaml 的交互逻辑
/// </summary>
public partial class wndChild : Window
{
public wndChild()
{
InitializeComponent();
} public event EventHandler MyEvent;                    //声明事件
protected virtual void OnMyEvent(object sender, EventArgs e) //声明触发事件函数,一般以On+事件名为名
{
if (e != null)
{
MyEvent(sender, e);
}
} private void btnTriggerEvent_Click(object sender, RoutedEventArgs e)
{
OnMyEvent(this, new EventArgs());                  //调用触发事件函数,注意指明sender并建立新的EventArgs
         }
}
}

实现。

小结:本例中自定义事件实现了期望的功能且不破坏窗口的封装,对于一些比较复杂消息传递、功能调用也可以通过继承EventArgs建立自定义事件数据类。

.net 中 C# 简单自定义事件实现的更多相关文章

  1. vue2.0中v-on绑定自定义事件

    vue中父组件通过prop传递数据给子组件,而想要将子组件的数据传递给父组件,则可以通过自定义事件的绑定. 每个Vue实例都实现了[事件接口],即: 1.使用 $on(eventName) 监听事件 ...

  2. vue2.0中v-on绑定自定义事件的理解

    vue中父组件通过prop传递数据给子组件,而想要将子组件的数据传递给父组件,则可以通过自定义事件的绑定. 每个Vue实例都实现了[事件接口],即: 1.使用 $on(eventName) 监听事件 ...

  3. C#超简单自定义事件

    我知道你为啥点进来,所以不要犹豫了,立刻马上果断创建控制台项目,直接复制下面精干短小而又强大的代码运行: using System; using System.Collections.Generic; ...

  4. js简单自定义事件与主动触发事件

    var events = { addHandler: function (element, eventType, handler) { if (element.addEventListener) { ...

  5. javascript高级技巧篇(作用域安全、防篡改、惰性载入、节流、自定义事件,拖放)

    安全的类型检测 在任何值上调用Object原生的toString()方法,都会返回一个[object NativeConstructorName]格式字符串.每个类在内部都有一个[[Class]]属性 ...

  6. Spring 事件(2)- 自定义事件

    Spring 系列教程 Spring 框架介绍 Spring 框架模块 Spring开发环境搭建(Eclipse) 创建一个简单的Spring应用 Spring 控制反转容器(Inversion of ...

  7. vue第八单元(组件通信 子父,父子组件通信 自定义事件 事件修饰符 v-model props验证 )

    第八单元(组件通信 子父,父子组件通信 自定义事件 事件修饰符 v-model props验证 ) #课程目标 掌握使用props让父组件给子组件传参(重点) 掌握props属性的使用以及prop验证 ...

  8. JavaScript使用自定义事件实现简单的模块化开发

    WEB前端最常见驱动方式就是事件了, 所有交互等等都是通过事件,前端的常见事件有: UI事件: 焦点事件: 鼠标事件: 滚轮事件: 文本事件: 键盘事件: 变动事件: 现在网页上有一个输入框, 如果我 ...

  9. flex中dispatchEvent的用法(自定义事件) .

    Evevt和EventDispatcher类在as3的事件机制中是很重要的角色,dispatchEvent()是EventDispatcher类的一个事件发送方法,它可以发送出Event类或其子类的实 ...

随机推荐

  1. 防火墙内JVisualVM连接jstatd解决方案

    jstatd启动后会打开两个端口,其中一个端口可通过参数“-p”指定,如果不指定默认为1099,另一个是一个随机端口,不能参数指定: # netstat -lpnt|grep jstatd tcp   ...

  2. AIX 批量更改密码

    使用 chpasswd 可以使用 chpasswd 方便地更改单个或多个账户密码.这意味着不需要像平时一样在命令行上重复输入密码.尽管可以以交互方式使用 chpasswd,但是我建议以非交互方式使用它 ...

  3. Ng第一课:引言(Introduction)

    Machine Learning(机器学习)是研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能. 它是人工智能的核心,是使计算机具有智能的根本 ...

  4. 22个值得收藏的Android开源代码——cool

    转自http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2014/1020/1808.html 本文介绍了android开发者中比较热门的开源代 ...

  5. cvpr2015总结

    cvpr所有文章 http://cs.stanford.edu/people/karpathy/cvpr2015papers/ CNN Hypercolumns for Object Segmenta ...

  6. 集成算法(chapter 7 - Hands on machine learning with scikit learn and tensorflow)

    Voting classifier 多种分类器分别训练,然后分别对输入(新数据)预测/分类,各个分类器的结果视为投票,投出最终结果: 训练: 投票: 为什么三个臭皮匠顶一个诸葛亮.通过大数定律直观地解 ...

  7. ctags的如何生成tags文件

    tags 在使用vim编程和浏览代码是非常有用.可以用CTRL+]和CTRL+t 来回跳转关键字.先生成自己工作目录的tags.最简单粗暴用法: $cd yourwork $ctags -R * 这样 ...

  8. [leetcode.com]算法题目 - Gray Code

    The gray code is a binary numeral system where two successive values differ in only one bit. Given a ...

  9. 在window主机上访问virtualbox虚拟机上centos7的tomcat服务

    在virtualbox上装完centos7后,随后装了tomcat服务器,然后在主机上发现用google浏览器访问tomcat不了 于是用ping检测下,发现ping不通,经过多方查找,才配置好,于是 ...

  10. 【入门推荐】SQL注入进行WebShell渗透测试的基础概览

    作者:zero 本文为SQL基本注入的进阶文章,如有任何疑问请查看: SQL基本注入演示:https://www.cnblogs.com/anbus/p/10082452.html 导语: 利用SQL ...