Outlook插件开发:如何禁用邮件项Send按钮?现有方法失效
如何禁用Outlook邮件项的Send按钮?
我是Outlook插件开发新手,想了解是否可以禁用邮件项的Send按钮。我尝试遍历控件并使用FindControl函数查找该按钮,但始终无法找到。我的最新尝试代码如下:
Office.CommandBars commandBars = (Office.CommandBars)inspector.CommandBars; Office.CommandBar standardToolbar = commandBars["Standard"]; // Find the Send button Office.CommandBarControl sendButton = standardToolbar.FindControl( Office.MsoControlType.msoControlButton, Type.Missing, "Send", true, true); // Disable the Send button sendButton.Enabled = false;但
sendButton始终为null。
问题原因
你当前使用的CommandBars属于旧版Office API,在现代Outlook(基于RibbonUI架构的版本)中兼容性较差;另外用显示文本"Send"查找控件也不可靠——控件文本会随Outlook语言版本变化,且Send按钮不一定在"Standard"工具栏下。
解决方案
方法1:使用Ribbon XML自定义(推荐,适配现代Outlook)
现代Outlook插件官方推荐通过Ribbon UI修改内置控件状态,步骤如下:
- 在插件项目中添加Ribbon XML文件,写入以下内容:
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="Ribbon_Load"> <ribbon> <tabs> <tab idMso="TabNewMailMessage"> <group idMso="GroupSend"> <button idMso="Send" getEnabled="GetSendButtonEnabled"/> </group> </tab> </tabs> </ribbon> </customUI>
- 在对应的Ribbon代码类中实现
GetSendButtonEnabled方法,动态控制按钮可用性:
public bool GetSendButtonEnabled(Office.IRibbonControl control) { // 返回false直接禁用Send按钮,可根据业务逻辑动态调整判断条件 return false; }
如果需要针对特定邮件项控制,可在邮件项打开时记录当前Inspector实例,在GetSendButtonEnabled中判断目标邮件是否需要禁用Send。
方法2:使用CommandBars(仅适配旧版Outlook或兼容模式)
若必须依赖旧版API,可通过控件ID而非文本查找(Send按钮的固定ID为37),修改代码如下:
Office.CommandBars commandBars = (Office.CommandBars)inspector.CommandBars; Office.CommandBar standardToolbar = commandBars["Standard"]; // 用固定ID37查找Send按钮 Office.CommandBarControl sendButton = standardToolbar.FindControl( Office.MsoControlType.msoControlButton, 37, Type.Missing, true, true); if (sendButton != null) { sendButton.Enabled = false; }
注意:该方法在现代Outlook的Ribbon界面下可能失效,微软已不再推荐使用CommandBars API。
内容的提问来源于stack exchange,提问作者pfinferno
相关产品推荐
相关产品推荐

