我已经多次使用c#事件了。举个最近的例子:我用vsto做的一个word插件。这个插件分为两层,业务逻辑层和word外接程序。有这么一个场景,我的ribbon中的一个label是动态显示的。它会随着word正文的样式变化,而显示不同的样式名称。如图1:

NoteFirst2016是我做的word插件,”暂无使用的样式”,这个就是我所说的label。

图1

当我点击“引文插入”,如图2:

图2

当我点击“更换引文样式”,如图3:

图3

label动态显示,还需要调用ribbon的一个方法,才能够触发。

我想到的第一个方案:在ribbon实例化WordAddInAssistant(业务逻辑层封装的一个操作word的类)时,把ribbon作为参数传给WordAddInAssistant,WordAddInAssistant在合适的时机调用ribbon来触发label的显示。但是,后来发现这个方案有一个问题。我还有一个cs客户端的程序,也操作WordAddInAssistant,实现插入word,这时候,我们没有ribbon,怎么办呢?那么label是不是没法更新了?

显然,第一个方案,此时是行不通了。

那我想,不管业务层如何操作,要想实现label动态显示,必须调用ribbon的这个方法。于是,在午睡时候,脑子里蹦出了用事件来实现。事件实现的机制是这样的:只要业务层实现“插入word“或者“更改引文样式”,此时必须得通知ribbon,让它更新label。至于谁调用了业务层,我不管。这样ribbon和业务层实现了解耦,没有必要在实例化WordAddInAssistant时,非得把ribbon搅合进去。

于是我做了两件事情,第一,我在WordAddInAssistant类里,定义了changeStyle事件。第二,我在ribbon加载时,订阅了此事件,也就是关联了事件的处理方法。一旦得到业务层通知,ribbon便会更新label。

以下是核心代码:

定义事件,首先得定义一个委托,我是用c#预定义的委托Action类型来定义事件的。

Ribbon_Load里面红色部分,表示事件订阅,内部lambda表达式是事件处理方法。

c#事件的应用的更多相关文章

  1. JNI详解---从不懂到理解

    转载:https://blog.csdn.net/hui12581/article/details/44832651 Chap1:JNI完全手册... 3 Chap2:JNI-百度百科... 11 C ...

  2. Jquery的点击事件,三句代码完成全选事件

    先来看一下Js和Jquery的点击事件 举两个简单的例子 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN&q ...

  3. 关于 Chrome 浏览器中 onresize 事件的 Bug

    我在写插件时用到了 onresize 事件,在反复地测试后发现该事件在 Chrome 及 Opera(内核基本与 Chrome 相同,以下统称 Chrome)浏览器打开时就会执行,这种情况也许不能算作 ...

  4. MVVM设计模式和WPF中的实现(四)事件绑定

    MVVM设计模式和在WPF中的实现(四) 事件绑定 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在WPF中 ...

  5. C++中的事件分发

    本文意在展现一个C++实现的通用事件分发系统,能够灵活的处理各种事件.对于事件处理函数的注册,希望既能注册到普通函数,注册到事件处理类,也能注册到任意类的成员函数.这样在游戏客户端的逻辑处理中,可以非 ...

  6. 移动端IOS点击事件失效解决方案

    解决方案 解决办法有 4 种可供选择: 1 将 click 事件直接绑定到目标元素(即 .target)上 2 将目标元素换成 <a> 或者 button 等可点击的元素 3 将 clic ...

  7. Android笔记——Button点击事件几种写法

    Button点击事件:大概可以分为以下几种: 匿名内部类 定义内部类,实现OnClickListener接口 定义的构造方法 用Activity实现OnClickListener接口 指定Button ...

  8. HTML 事件(一) 事件的介绍

    本篇主要介绍HTML中的事件知识:事件相关术语.DOM事件规范.事件对象. 其他事件文章 1. HTML 事件(一) 事件的介绍 2. HTML 事件(二) 事件的注册与注销 3. HTML 事件(三 ...

  9. HTML 事件(二) 事件的注册与注销

    本篇主要介绍HTML元素事件的注册.注销的方式. 其他事件文章 1. HTML 事件(一) 事件的介绍 2. HTML 事件(二) 事件的注册与注销 3. HTML 事件(三) 事件流.事件委托 4. ...

  10. HTML 事件(三) 事件流与事件委托

    本篇主要介绍HTML DOM中的事件流和事件委托. 其他事件文章 1. HTML 事件(一) 事件的介绍 2. HTML 事件(二) 事件的注册与注销 3. HTML 事件(三) 事件流与事件委托 4 ...

随机推荐

  1. 【ASP.NET Core】处理异常(下篇)

    上一篇中,老周给大伙伴们扯了有关 ASP.NET Core 中异常处理的简单方法.按照老周的优良作风,我们应该顺着这个思路继续挖掘. 本文老周就不自量力地介绍一下如何使用 MVC Filter 来处理 ...

  2. Java经典编程题50道之四十八

    某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下: 每位数字都加上5,然后用和除以10的余数代替该数字, 再将第一位和第四位交换,第二位和第三位交换. public ...

  3. C语言_简单的阶乘函数

    include <stdio.h> long jc (int num); long jc2 (int num); int main() { long n; n = jc(); printf ...

  4. hiho第151周 Building in Sandbox floodfill

    题意:题目背景是<<我的世界>>,堆方块造房子,堆的规则是:新堆的方块必须和已有方块有重合面,而且不能往封闭空间里堆. 在三维空间中,给定一个堆的序列,判断符不符合规则. 数据 ...

  5. C. Vasya and String

    原题链接 C. Vasya and String High school student Vasya got a string of length n as a birthday present. T ...

  6. python-scrapy的编码问题

    在学习scrapy中,遇到编码问题还是很头痛的问题的.由于对于语言的对不熟悉,加上不会思考的去解决问题.这样盲目的实践似乎就是在浪费时间. 用心思考一下是非常重要的一个过程,在没有办法前进的时候,先学 ...

  7. Spring 中@NotNull, @NotEmpty和@NotBlank之间的区别是什么?

    简述三者区别 @NotNull://CharSequence, Collection, Map 和 Array 对象不能是 null, 但可以是空集(size = 0). @NotEmpty://Ch ...

  8. ui设计未来前景怎么样?ui设计这个行业怎么样?

    千锋UI设计师培训不仅有正常的培训课程,还为学员提供了UI+产品经理周末提升班,目的是为了给那些有基础的UI设计师提高能力.今天要为大家说的是一位千锋UI设计师的故事. 大家好,我是千锋UI设计培训部 ...

  9. ul+jquery自定义下拉选择框

    <!doctype html> <html> <head> <meta charset="UTF-8"> <title> ...

  10. SQL中partition关键字的使用

    最近在写后台语句时候,运用到了partition这样一个关键字. 先大致说一下背景,有一种数据表,如下 现在需要取出,每一个人最近的一次打卡时间. 思路是,先把数据按照人名分组,然后在每个组里面按照时 ...