MS Word 插件:右键单击处理程序

2024-01-01

我正在为 MS Word 2010 开发一个插件,我想向右键菜单添加几个菜单项(仅当选择某些文本时)。我看过几个添加项目的示例,但找不到如何有条件地添加项目。 简而言之,我想重写诸如 OnRightClick 处理程序之类的东西。 提前致谢。


这很简单,你需要处理WindowBeforeRightClick事件。在事件内部找到所需的命令栏和特定控件并处理Visible or the Enabled财产。

在下面的示例中,我切换Visible基于选择在文本命令栏上创建的自定义按钮的属性(如果选择包含“C#”,则隐藏该按钮,否则显示它)

    //using Word = Microsoft.Office.Interop.Word;
    //using Office = Microsoft.Office.Core;

    Word.Application application;

    private void ThisAddIn_Startup(object sender, System.EventArgs e)
    {
        application = this.Application;
        application.WindowBeforeRightClick +=
            new Word.ApplicationEvents4_WindowBeforeRightClickEventHandler(application_WindowBeforeRightClick);

        application.CustomizationContext = application.ActiveDocument;

        Office.CommandBar commandBar = application.CommandBars["Text"];
        Office.CommandBarButton button = (Office.CommandBarButton)commandBar.Controls.Add(
            Office.MsoControlType.msoControlButton);
        button.accName = "My Custom Button";
        button.Caption = "My Custom Button";
    }

    public void application_WindowBeforeRightClick(Word.Selection selection, ref bool Cancel)
    {
        if (selection != null && !String.IsNullOrEmpty(selection.Text))
        {
            string selectionText = selection.Text;

            if (selectionText.Contains("C#"))
                SetCommandVisibility("My Custom Button", false);
            else
                SetCommandVisibility("My Custom Button", true);
        }
    }

    private void SetCommandVisibility(string name, bool visible)
    {
        application.CustomizationContext = application.ActiveDocument;
        Office.CommandBar commandBar = application.CommandBars["Text"];
        commandBar.Controls[name].Visible = visible;
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MS Word 插件:右键单击处理程序 的相关文章

  • 多个源的 makefile

    在学习 make 文件时 我试图为多个源目录编写一个 make 文件 似乎我在某个地方错了 这是我的代码结构 directory common fun2 c inc fun h src fun1 c main c 这是我的生成文件 CC c
  • 如何在另一个应用程序中挂钩 api 调用

    我正在尝试挂钩另一个应用程序的 ExtTextOut 和 DrawTextExt GDI 方法调用 我知道我需要使用 GetProcAddress 来查找 gdi32 dll 中那些方法的地址 并用我的函数的地址覆盖我想要挂钩的进程中的地址
  • 在 Java 中创建 T 的新实例

    在C 中 我们可以定义一个泛型class A
  • 检测wlan是否关闭

    任何人都可以给我一个提示 如何在 Windows Phone 上以编程方式检测 C 8 1 应用程序 不是 8 0 是否启用 禁用 WLAN 我不想更改这些设置 只是需要知道 该解决方案是一个 Windows 8 1 通用应用程序 Wind
  • 将完整模板参数值映射到原始类型

    我想将数字映射到类型 在这个例子中 我将创建一个函数 将 sizeof 结果映射到有符号的原始类型 我想知道是否有更好的方法来完成我在现代 C 中所做的事情 即采用模板化值并将其转换为类型 现在 这可以将大小转换为已知类型 但我似乎无法在标
  • CSharpRepl emacs 集成?

    我碰巧知道莫诺CSharpRepl http www mono project com CsharpRepl 是否有 emacs csharp 模式使用它在一个窗口中运行 REPL 并像 python 模式一样在另一个窗口中编译 运行 C
  • 在 C# 中调用 C++ 库 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有很多用 C 编写的库 我想从 C 调用这些库 但是 我遇到了很多问题 我想知道是否有书籍或指南告诉我如何做到这一点 Dll导入 htt
  • 如何使用 SOAP 且不使用 WSE 在 .NET 中签署 Amazon Web 服务请求

    亚马逊产品广告 API 以前称为 Amazon Associates Web Service 或 Amazon AWS 实施了一项新规则 即自 2009 年 8 月 15 日起 向其发送的所有 Web 服务请求都必须经过签名 他们在其网站上
  • 计算另一个表达式中的 C# 表达式

    我想在另一个表达式中使用一个表达式 Expression
  • 为什么'enable_if'不能用于禁用这里声明

    include
  • C# 开源 NMEA 解析器 [已关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找 C 开源 NMEA 解析器 嗯 我自己也不熟悉 但是一些快速搜索显示了一个代码项目 htt
  • 将表(行)与 OpenXML SDK 2.5 保持在一起

    我想在 Word 文档中生成多个表 每行 2 行 但我想将这两行保留在一起 如果可能的话 new KeepNext 第一行不起作用 new KeepNext 第一行的最后一段不起作用 new CantSplit 放在桌子上不起作用 在所有情
  • 析构函数中的异步操作

    尝试在类析构函数中运行异步操作失败 这是代码 public class Executor public static void Main var c1 new Class1 c1 DoSomething public class Class
  • 引用/指针失效到底是什么?

    我找不到任何定义指针 引用无效在标准中 我问这个问题是因为我刚刚发现 C 11 禁止字符串的写时复制 COW 据我了解 如果应用了 COW 那么p仍然是一个有效的指针并且r以下命令后的有效参考 std string s abc std st
  • 选择查询不适用于使用Parameters.AddWithValue 的参数

    C 中的以下查询不起作用 但我看不出问题所在 string Getquery select from user tbl where emp id emp id and birthdate birthdate cmdR Parameters
  • 如何在 winforms 应用程序的主屏幕显示之前显示欢迎屏幕?

    我想在应用程序启动时加载欢迎屏幕 然后用户单击欢迎屏幕上的按钮 然后关闭欢迎屏幕 最后显示主屏幕 static void Main startup method being called Application EnableVisualSt
  • LINQ 中的“from..where”或“FirstOrDefault”

    传统上 当我尝试从数据库中获取用户的数据时 我使用了以下方法 在某种程度上 DbUsers curUser context DbUsers FirstOrDefault x gt x u LoginName id string name c
  • 如何得知客户端从服务器的下载速度?

    根据客户的下载速度 我想以低质量或高质量显示视频 任何 Javascript 或 C 解决方案都是可以接受的 Thanks 没有任何办法可以确定 您只能测量向客户端发送数据的速度 如果没有来自客户端的任何类型的输入来表明其获取信息的速度 您
  • 使用 using 声明时,非限定名称查找如何工作?

    根据 C 标准 这是格式错误还是格式良好 namespace M struct i namespace N static int i 1 using M i using N i int main sizeof i Clang 拒绝它 GCC
  • 使用未分配的局部变量

    我遇到了一个错误 尽管声明了变量 failturetext 和 userName 错误仍然出现 谁能帮帮我吗 Use of Unassigned local variable FailureText Use of Unassigned lo

随机推荐

  • 在 iOS 中集成 Google 和 Facebook 登录 - AppDelegate openURL

    我正在尝试将 facebook 和 google 登录集成到我的应用程序中 但遇到了问题 两者都需要将以下内容添加到 Appdelegate 中的 openURL 方法中 return GIDSignIn sharedInstance ha
  • 为什么 `print(object)` 显示 `<__main__.对象位于 0x02C08790>`?

    我不断得到 lt main Camera object at 0x02C08790 gt 我不知道为什么 我希望代码基本上在一个循环中从 Calc Speed 转到 Counter 然后返回到 Calc Speed class Camera
  • MSBuild:如何为 Web 部署项目(VS2010)构建 Web 部署包?

    我将一个网站项目 带有 Web 部署项目 从 VS2008 迁移到 VS2010 现在我可以在 VS2010 中为 Web 部署项目制作 构建部署包 效果非常好 但我找不到通过 MSBuild 执行相同操作的方法 我回答我的一个问题 经过大
  • COM 字符串 (BSTR) 和 .NET 字符串有什么区别?

    这只是字节组合来 编码 数据的方式吗 我很好奇 因为我想知道 RCW 如何自动获取 NET 字符串并将其转换为 COM BSTR 我猜测它只是形成了从 NET 字符串转换而来的有效 COM BSTR 相关 我可以使用 NET 中的字节类型构
  • 从上下文资产中的 Uri 加载 MediaPlayer

    我的资产目录中有一个音频文件 资产 音频 dance mp3 如果我运行 context getAssets list audio 它出现了 但是当我尝试使用 MediaPlayer create context uri 时它总是失败并返回
  • 安装适用于 Python 的 TextBlob 时遇到问题

    我是编程新手 我正在尝试安装 Python 的 TextBlob 库来帮助我做一些事情 遗憾的是 我在安装 TextBlob 时遇到了麻烦 更不用说使用它了 我使用的是Windows 这似乎让事情变得更加困难 我希望我可以只运行 Linux
  • StructureMap 和嵌套泛型

    我想知道是否有一种方法可以在其中连接嵌套泛型StructureMap无需指定内部类型或创建特定于类型的接口 我意识到这有点令人困惑 因此编码示例可能是对我正在寻找的功能的更好解释 public interface IParser
  • 使用 jQuery 切换元素的属性?

    使用 jQuery 构建树形菜单 并且我希望它可以访问 因此我使用 aria 属性 我想要做的是在单击 输入时将 aria expanded 属性从 true 切换为 false 我已经尝试过 但显然不正确 this closest ul
  • 下拉列表中的地图位置名称

    我的应用程序必须使用文本框集成搜索位置名称 Map kit有什么方法可以实现这种功能吗 下图显示了我真正需要的 No MapKit没有任何方法来实现这种类型的属性 为此 您必须实现自己的代码 即使用 UISearchbarCantrolle
  • 为什么鱼绑定在 mac os 中不起作用?

    我正在尝试使用一些鱼绑定 但无法让它们在我的 Apple sierra 中同时使用 iterm2 和终端工作 例如 当我使用Alt d它应该删除一个单词 它插入了字母 我在这里错过了什么吗 您需要将终端配置为将 option alt 键视为
  • 不能在赋值中使用类型 interface {} 作为类型 person:需要类型断言

    我尝试转换interface 构造person package main import encoding json fmt func FromJson jsonSrc string interface var obj interface j
  • 更新后Android资源编译失败

    更新 android studio 后 我的项目崩溃并出现以下错误 Android resource compilation failed Output C Users aliya Desktop EventsToday app build
  • 为一个名称 urllib2 发送多个值

    我正在尝试提交一个包含复选框的网页 并且我最多需要选中其中 10 个复选框 问题是当我尝试将它们分配给字典中的一个名称时 它只分配最后一个而不是全部 10 个 那么我该如何做到这一点 这里是请求代码 forms ref ck ref typ
  • 将日期和时间输入字符串组合为日期对象

    我有两个输入标签用于从用户处选择日期和时间 p Start Date p p p
  • 为 CMake 引入新的编译器

    我们使用一个特定的编译器 称为 Cadul 它有自己的库 目标等 问题是 与 GNU Intel Clang 等 标准 编译器相比 CMake 不支持它 首先我想使用交叉编译 但它不起作用 因为主机和目标平台是相同的 然后我查看了模块 在其
  • 如何用 Swift 创建波浪路径

    我希望我的节点以正弦曲线波行进 我尝试将其用于 CGPath 如何创建遵循正弦曲线的 CGPath 除了手动查找曲线上的点之外 还有其他方法吗 或者我可以只传递正弦函数吗 let action SKAction followPath
  • Gradle 无法同步“无法找到可选库”

    我必须重新安装系统 今天当我尝试与 gradle 同步时 我在 Android Studio 中收到此错误 Warning Unable to find optional library org apache http legacy 我的项
  • 我想将 std::string 转换为 const wchar_t *

    有什么方法吗 我的电脑是AMD64 std string str BOOL loadU const wchar t lpszPathName int flag 0 当我使用时 loadU str VS2005编译器说 Error 7 err
  • 将 Word/PDF 文档从文件系统索引到 SQL Server

    我正在尝试为我遇到的问题提出一个简单的解决方案 因为到目前为止我发现的所有这些似乎都太复杂了 情况是我们使用专有应用程序来管理我们业务的大部分方面 它有一个SQL Server 2005后端数据库 该数据库相当大 该应用程序还允许将 Wor
  • MS Word 插件:右键单击处理程序

    我正在为 MS Word 2010 开发一个插件 我想向右键菜单添加几个菜单项 仅当选择某些文本时 我看过几个添加项目的示例 但找不到如何有条件地添加项目 简而言之 我想重写诸如 OnRightClick 处理程序之类的东西 提前致谢 这很