次の方法で共有


方法: 既存のショートカット キーを保持する

通常、コマンドのショートカット キーを変更すると、既存のショートカットが失われます。次の例では、2 つの新しいショートカットを 1 つのコマンドに割り当て、そのコマンドの既存のショートカットも保持する方法を示します。

コマンドとその現在のショートカットの一覧を表示するには、「方法 : 既存のショートカット キーを表示する」に示されている ListKeyBindings の例を実行してください。

[!メモ]

実際に画面に表示されるダイアログ ボックスとメニュー コマンドは、アクティブな設定またはエディションによっては、ヘルプの説明と異なる場合があります。ここに記載されている手順は、全般的な開発設定が適用されているものとして記述されています。設定を変更するには、[ツール] メニューの [設定のインポートとエクスポート] をクリックします。詳細については、「Visual Studio の設定」を参照してください。

新しいショートカット キーを追加し、既存のショートカット キーを保持するには

  1. Visual Studio アドイン ウィザードを使用してアドインを作成します。プロジェクトに名前を付け、[OK] をクリックしてウィザードを開始します。

    Visual Studio アドイン ウィザードの使用方法の詳細については、「方法 : アドインを作成する」を参照してください。

  2. [プログラミング言語の選択] ページで、[Visual C# を使用してアドインを作成] を選択して、後で示す Visual C# の例を実行するか、[Visual Basic を使用してアドインを作成] を選択して、Visual Basic の例を実行します。

  3. 後で示す関数の例を、Visual Studio アドイン ウィザードによって生成されたコードの Connect クラス内に貼り付けます。

  4. 既定のキーボード設定のコピーを作成するために、C:\Program Files\Microsoft Visual Studio 10\Common7\IDE\ に移動します。

  5. いずれかの .vsk ファイルを右クリックし、[コピー] をクリックします。

  6. コピーしたファイルを同じフォルダーに貼り付けて、ファイル名を変更します。

  7. 新しい .vsk ファイルがショートカット キーのリストに表示されることを確認するには、Visual Studio で、[ツール] メニューの [オプション] をクリックします。

  8. [オプション] ダイアログ ボックスの左ペインで、[環境] フォルダーを展開し、[キーボード] を選択します。

    前の手順で指定した .vsk ファイルの名前が [次の追加キーボード マップ スキームを適用] ボックスの一覧に表示されていることを確認します。

  9. アドインの例を実行する前に、ショートカット キーが [(既定)] に設定されていることを確認します。この設定を行うには、[オプション] ダイアログ ボックスの [キーボード] ペインで [リセット] をクリックします。

  10. アドインの例の prop.Value = "<Filename.vsk>" のステップで、<Filename.vsk> 部分を前の手順で指定した .vsk ファイルの名前に置き換えます。

  11. 方法 : オートメーション オブジェクト モデルのコード例をコンパイルおよび実行する」で説明されているように、OnConnection メソッドから関数を呼び出します。

  12. アドインをビルドします。

  13. アドインを実行するには、[ツール] メニューの [アドイン マネージャー] をクリックし、作成したアドインを選択して、[OK] をクリックします。

    File.NewFile コマンドに、元のショートカットだけではなく、新しいショートカット キー (Ctrl + Alt + Shift + Y キーおよび Ctrl + Alt + Shift + U キー) も割り当てられます。

使用例

2 つの新しいショートカット キーを 1 つのコマンドに割り当て、そのコマンドの既存のショートカット キーも保持するアドインの例を次に示します。

Sub PreserveBindings()
    ' Adds two new key bindings while preserving the existing ones.
    Dim cmds As Commands
    Dim cmd As Command
    Dim props As EnvDTE.Properties = DTE.Properties("Environment", _
    "Keyboard")
    Dim prop As EnvDTE.Property
    Dim bindings() As Object
    Dim bindingNumber As Integer

    ' Set references to the Commands collection and the File.NewFile
    ' command.
    cmds = DTE.Commands
    cmd = cmds.Item("File.NewFile")
    ' Make a writeable copy of the default keymapping scheme.
    prop = props.Item("SchemeName")
    prop.Value = "<FileName.vsk>"
    ' Retrieve the current bindings for the command.
    bindings = cmd.Bindings
    ' Get the number of bindings for the command.
    bindingNumber = bindings.Length
    ' Add two more elements to the array to accomodate two
    ' new commands.
    ReDim Preserve bindings(bindingNumber + 1)
    ' Add the new bindings to the existing ones in the array.
    bindings(bindingNumber) = "Global::CTRL+ALT+SHIFT+Y"
    bindings(bindingNumber + 1) = "Global::CTRL+ALT+SHIFT+U"
    ' Assign the contents of the bindings array to the Bindings 
    ' property.
    cmd.Bindings = bindings
End Sub
public void OnConnection(object application,
 Extensibility.ext_ConnectMode connectMode, object addInInst, ref
 System.Array custom)
{
    _applicationObject = (DTE2)application;
    _addInInstance = (AddIn)addInInst;
    // Pass the applicationObject member variable to the code example.
    PreserveBindings((_applicationObject); 
}

// Add-in example for TextSelection.FindPattern.
// Also shows usage of these methods and properties:
//    TextSelection.SelectLine
public void PreserveBindings( DTE dte ) 
{ 
    // Adds two new key bindings while preserving the existing ones.
    Commands cmds = null; 
    Command cmd = null; 
    EnvDTE.Properties props = dte.get_Properties( "Environment",
 "Keyboard"); 
    EnvDTE.Property prop = null; 
    Object[] bindings = null; 
    int bindingNumber = 0; 

    //  Set references to the Commands collection and the File.NewFile
    //  command.
    cmds = dte.Commands; 
    cmd = cmds.Item( "File.NewFile", -1 ); 
    // Make a writeable copy of the default keymapping scheme.
    prop = props.Item( "SchemeName" ); 
    prop.Value = "<FileName.vsk>"; 
    // Retrieve the current bindings for the command.
    bindings = ( ( System.Object[] )( cmd.Bindings ) ); 
    // Get the number of bindings for the command.
    bindingNumber = bindings.Length; 
    // Add two more elements to the array to accomodate two
    // new commands.
    // Create temp variable for copying values. 
    // Arrays are zero-based in C#.
    object[] temp = new object[ bindingNumber + 2 ]; 
    System.Array.Copy( bindings, temp, Math.Min( bindings.Length,
 temp.Length ) ); 
    bindings = temp; 
    // Add the new bindings to the existing ones in the array.
    bindings[ bindingNumber ] = "Global::CTRL+ALT+SHIFT+Y"; 
    bindings[ bindingNumber+1 ] = "Global::CTRL+ALT+SHIFT+U"; 
    // Assign the contents of the bindings array to the Bindings 
    // property.
    cmd.Bindings = bindings; 
}

参照

処理手順

方法 : コマンドを単一のショートカット キーに割り当てる

方法: 1 つのコマンドに複数のショートカット キーを割り当てる

概念

Bindings プロパティのパラメーター形式

その他の技術情報

アドイン コマンドのキーへの割り当て