VSTO Word 激活功能区选项卡
本文关键字:选项 功能区 激活 Word VSTO | 更新日期: 2023-09-27 17:56:45
我有以下功能区.xml在我的单词vsto加载项中:
<tab id="TabLetters" getVisible="IsLettersTabVisible" label="Letters">
<group id="LettersGroup" label="Letters">
<toggleButton id="NewWithTemplate"
label="New using template Controls"
size="large"
imageMso="FileNew"
onAction="NewTemplated" />
</toggleButton>
</group>
</tab>
以及点击事件背后的以下代码:
public void NewTemplated(Office.IRibbonControl control, bool value)
{
CloseDocument();
var doc = Globals.ThisAddIn.Application.Documents.Add(Template: @"LETTER_V2.dotx", Visible: true);
doc.Activate();
_ribbon.ActivateTab("TabLetters");
}
我本来希望这会导致一个新窗口打开我的功能区选项卡,但它只是保持可见/当前的 HOME 选项卡。 如何使我的选项卡是可见的选项卡?
您可以通过以下两种方式设置活动选项卡:
TabLetters.RibbonUI.ActivateTab("TabLetters");
或
Globals.Ribbons.CustomRibbon.Tabs[Your tab id].RibbonUI.ActivateTab("TabLetters");
我找到了 excel 2007 的解决方案。
法典:
int appVersion = Convert.ToInt32(Globals.ThisAddIn.Application.Version.Split(new char[] { '.' }, StringSplitOptions.RemoveEmptyEntries)[0]);
if (appVersion >= 14 )
{
ThisRibbonCollection ribb = Globals.Ribbons;
ribb.[Your Ribbon].ApplicationGroup.RibbonUI.ActivateTab("tab");
}
else if(appVersion == 12) // Specific to Office 2007 only.
{
SendKeys.Send("%TAB%"); // use sendwait if you running it in thread.
}
在 Excel 2013 中,以下是我需要使用的代码:
try
{
// Attempt to set the my VSTO ribbon bar as the active ribbon.
string controlID = Globals.Ribbons.GetRibbon<MikesRibbon>().MikesTab.ControlId.ToString();
this.RibbonUI.ActivateTab(controlID);
}
catch
{
}
我偶然发现的一点是如何让 ControlID 传递给 ActivateTab
函数。
您需要在VS2013中打开MikesRibbon.cs
文件(或等效文件! 它将显示功能区的外观,功能区的选项卡名称旁边有一个灰色的FILE
选项卡。
在此设计器屏幕中,单击功能区的选项卡(即FILE
右侧的选项卡),"属性"窗口现在将显示一个ControlID
值,您可以将其设置为您选择的值。
只适合所有必须支持Office 2007的人(像我一样)。下面是 Office 2007 的一个(丑陋但有效的)解决方案:
- 打开办公应用程序
- 按 Alt,然后查看自定义功能区选项卡的键盘快捷方式
- 在您的代码中,您现在可以通过 SendKeys.SendWait 函数发送此密钥
希望它对某人有所帮助。问候,约尔格
法典:
public void FocusMyCustomRibbonTab()
{
if (IsExcel2007())
{
Globals.Ribbons.GetRibbon<MyRibbon>().tabMyRibbonTab.KeyTip = "GGG";
//Excel 2007: Must send "ALT" key combination to activate tab, here "GGG"
SendKeys.Send("%");
SendKeys.Send("{G}");
SendKeys.Send("{G}");
SendKeys.Send("{G}");
SendKeys.Send("%");
}
else
{
//Excel 2010 or higher: Build in way to activate tab
if (this.ribbon.RibbonUI != null)
{
this.ribbon.RibbonUI.ActivateTab("MY_RIBBON_TAB_NAME");
}
}
}
public static bool IsExcel2007()
{
return (Globals.ThisAddIn.Application.Version.StartsWith("12"));
}
在 Word 2016 中使用 RibbonUI.ActivateTabMso(controlID) 激活常规 Word 功能区选项卡。
此外,您可以通过添加加载项来获取对功能区的正确引用:
static internal Microsoft.Office.Tools.Ribbon.OfficeRibbon rUI = null;
private void WorkBenchRibbon_Load(object sender, Microsoft.Office.Tools.Ribbon.RibbonUIEventArgs e)
{
rUI = ((Microsoft.Office.Tools.Ribbon.OfficeRibbon)sender).Ribbon;
}
如果您来这里寻找解决方案,因为您已经从 Application.DocumentOpen 事件处理程序或一些类似事件中尝试了上述任何操作,但不断收到错误,您可能会遇到此障碍。
https://social.msdn.microsoft.com/Forums/vstudio/en-US/baa9a81d-aad3-4af5-9d0a-f945c26ffa18/activiating-a-ribbon-tab-for-vsto-for-a-workbook-solutions-when-a-workbook-is-loaded-net-4?forum=vsto
简短且不那么甜蜜的答案是您无法激活选项卡,直到...后。。。通过使用计时器并响应已用事件。 只是希望节省一些人的时间。