当我开发这个应用程序时(在C#Visual Studio 2008中)我问了同样的问题(实际上设法在MS论坛上找到答案,我应该得到某种奖品).MS的答案是,为您自己的方法设置键盘快捷键的唯一方法是编写一个调用该方法的宏(显然是通过COM.)并设置调用该宏的快捷方式.
这真的不是我想听到的答案.VSTO可以很好地利用功能区等构建一个非常好的应用程序,但是你必须通过COM暴露整个事物并通过宏构建另一个接口.除了浪费时间之外,它完全绕开了MS为支持VSTO加载项而构建的所有安全性.
我的问题是:这真的是必要的(整个COM /宏的东西),还是有一种方法可以为我自己的功能区项目分配键盘快捷键?Word 2007?Word 2010?
谢谢
回答太晚了但值得分享.
我在项目中使用过键盘快捷键.基本上这个快捷键应该带一个名为SignOff的WPF表单.可以通过单击功能区选项卡中的按钮或使用键盘快捷键(Ctrl + Shift + S)来显示此WPF表单.
我需要编写代码的地方有四个.
单击事件时调用功能区按钮的操作方法.
public void btnInsertSignoff_Click(IRibbonControl control)
{
InsertSignoff();//This method displays the sign off form
}
Run Code Online (Sandbox Code Playgroud)以下代码将键盘快捷键与Addin Startup/Document Change事件中的VBA代码绑定在一起
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
Globals.ThisAddIn.Application.KeyBindings.Add(WdKeyCategory.wdKeyCategoryCommand, "InsertSignOff ", Globals.ThisAddIn.Application.BuildKeyCode(WdKey.wdKeyControl, WdKey.wdKeyShift, WdKey. wdKeyS));
}
Run Code Online (Sandbox Code Playgroud)此链接显示如何使用键盘快捷键调用VBA代码. http://www.wordbanter.com/showthread.php?t=31813
我按照这个例子但是在VSTO Addin Startup事件中我没有使用VBA,而是第二个参数"InsertSignOff"是步骤4中的VBA方法.
写了另一个名为InsertSignOff的方法(将VSTO方法暴露给VBA之后).
[ComVisible(true)]
public interface IAddInAdapter
{
void InsertSignOff ();
}
[ComVisible(true)]
[ClassInterface(ClassInterfaceType.None)]
public class AddinAdapter : IAddInAdapter
{
public void InsertSignOff()
{
InsertSignoff();//This method displays the sign off form
}
}
Run Code Online (Sandbox Code Playgroud)此链接说明如何向VBA公开VSTO代码 http://msdn.microsoft.com/en-us/library/bb608604.aspx
在用户模板位置"C:\ Users \\ AppData\Roaming\Microsoft\Templates"中创建了一个.dotm文件,其中包含以下VBA代码
Sub InsertSignOff ()
Dim addIn As COMAddIn
Dim automationObject As Object
Set addIn = Application.COMAddIns("Wordaddin.AddinAdapter")
Set automationObject = addIn.Object
automationObject.InsertSignOff
End Sub
Run Code Online (Sandbox Code Playgroud)希望这对某人有所帮助.
| 归档时间: |
|
| 查看次数: |
4434 次 |
| 最近记录: |