如何:将一个命令绑定到多个键盘快捷键

可以将多个键盘快捷键绑定到一个命令。 例如,如果使用同一个项目的两个用户倾向于通过不同的键盘快捷键来使用相同的命令,这将非常有用。 通过将键盘快捷键作为 Object 类型的数组中的字符串元素传递,可实现此绑定。

备注

以下说明中的某些 Visual Studio 用户界面元素在计算机上出现的名称或位置可能会不同。您安装的 Visual Studio 版本以及使用的设置决定了这些元素。有关更多信息,请参见 Visual Studio 设置

将一个命令绑定到多个键盘快捷键

  1. 使用**“Visual Studio 外接程序向导”创建一个外接程序。 为项目命名,并单击“确定”**以启动该向导。

    有关如何使用**“Visual Studio 外接程序向导”**的更多信息,请参见如何:创建外接程序

  2. 在**“选择编程语言”页上选择“使用 Visual C# 创建外接程序”,以运行本主题中的 Visual C# 示例,或选择“使用 Visual Basic 创建外接程序”**以运行 Visual Basic 示例。

  3. 将示例函数粘贴到**“Visual Studio 外接程序向导”**生成的代码的 Connect 类中。

  4. 若要创建默认键盘设置的副本,请转到 .. \Program Files\Microsoft Visual Studio 10\Common7\IDE\。 右击其中的一个 .vsk 文件,再单击**“复制”**。 将副本粘贴在同一个文件夹中。 该副本名为“.vsk 文件名 的副本”。

  5. 重命名该文件的副本。

  6. 若要验证新的 .vsk 文件是否出现在 Visual Studio 的键盘绑定列表中,请在**“工具”菜单上单击“选项”**。

  7. 在**“选项”对话框的左窗格中,展开“环境”文件夹,然后选择“键盘”**。

    确保先前重命名的 .vsk 文件的名称出现在**“应用以下其他键盘映射方案”**列表中。

  8. 运行外接程序示例之前,请确保键盘绑定设置为**“(默认)”。 可以通过单击“选项”对话框的“键盘”窗格中的“重置”**来执行此操作。

  9. 在外接程序示例的 prop.Value = "< Filename.vsk>" 步骤中,用先前指定的新键盘方案名称替换 <Filename.vsk>。

  10. 按照如何:编译和运行自动化对象模型代码示例中的描述,从 OnConnection 方法调用该函数。

  11. 生成外接程序,然后通过以下方式运行该外接程序:单击**“工具”菜单上的“外接程序管理器”,选择您创建的外接程序,然后单击“确定”**。

    该命令绑定到两个不同的快捷键。 按 Ctrl+Shift+Alt+Y 或 Ctrl+Shift+Alt+X 以显示**“新建文件”**对话框。

示例

下面的示例用两个新的键盘快捷键来替换现有的键盘快捷键。

Public Sub OnConnection(ByVal application As Object, ByVal _
connectMode As ext_ConnectMode, ByVal addInInst As Object, _
ByRef custom As Array) Implements IDTExtensibility2.OnConnection
    _applicationObject = CType(application, DTE2)
    _addInInstance = CType(addInInst, AddIn)
    BindSingle(_applicationObject)
End Sub
Sub BindSingle(ByVal dte As DTE2)
    ' Adds two new keybindings to a command.
    Dim cmds As Commands
    Dim cmd As Command
    Dim props As EnvDTE.Properties = DTE.Properties("Environment", _"Keyboard")
    Dim prop As EnvDTE.Property
    Dim bindings(1) As Object

    ' Make a writeable copy of the default keymapping scheme.
    prop = props.Item("SchemeName")
    prop.Value = "<FileName.vsk>"
    ' Assign the two shortcut key combinations, CTRL+SHIFT+ALT+Y and 
    ' CTRL+SHIFT+ALT+X, to the two bindings array elements. 
    bindings(0) = "Global:: CTRL+SHIFT+ALT+Y"
    bindings(1) = "Global:: CTRL+SHIFT+ALT+X"
    ' Set references to the Commands collection and the File.NewFile
    ' command.
    cmds = DTE.Commands
    cmd = cmds.Item("File.NewFile")
    ' Assign the contents of the bindings array to the Bindings 
    ' property.
    cmd.Bindings = bindings
End Sub
public void OnConnection(object application,
 ext_ConnectMode connectMode, object addInInst, ref Array custom)
{
    _applicationObject = (DTE2)application;
    _addInInstance = (AddIn)addInInst;
    // Pass the applicationObject member variable to the code example.
    BindMultiple(_applicationObject ); 
}

public void BindMultiple( DTE2 dte ) 
{ 
    // Adds two new keybindings to a command.
    Commands cmds = null; 
    Command cmd = null; 
    EnvDTE.Properties props = dte.get_Properties( "Environment",
 "Keyboard"); 
    EnvDTE.Property prop = null; 
    Object[] bindings = new Object[ 2 ]; 

    // Make a writeable copy of the default keymapping scheme.
    prop = props.Item( "SchemeName" ); 
    prop.Value = "<FileName.vsk>"; 
    // Assign the two shortcut key combinations, CTRL+SHIFT+ALT+Y and 
    // CTRL+SHIFT+ALT+X, to the two bindings array elements. 
    bindings[ 0 ] = "Global:: CTRL+SHIFT+ALT+Y"; 
    bindings[ 1 ] = "Global:: CTRL+SHIFT+ALT+X"; 
    // Set references to the Commands collection and the File.NewFile
    // command.
    cmds = dte.Commands; 
    cmd = cmds.Item( "File.NewFile", -1 ); 
    // Assign the contents of the bindings array to the Bindings 
    // property.
    cmd.Bindings = bindings; 
} 

请参见

任务

如何:将命令绑定到单个快捷键

如何:保留现有键盘快捷键

概念

Bindings 属性的参数格式

其他资源

将外接程序命令绑定到键