2010-10-05 89 views
3

我知道這裏已經有一些線索,但我不會爲我工作。VS2010加載項,添加命令到上下文菜單?

我想要的: 我需要在Visual Studio源代碼管理資源管理器的上下文菜單中有一個新條目。爲此我開始了一個新的插件項目。

我用什麼: 我用這篇文章爲指導。 http://blogs.msdn.com/b/team_foundation/archive/2010/06/24/extending-work-item-tracking-context-menus.aspx

什麼不工作: 我沒有得到任何例外,菜單不會顯示,無論我添加它在哪裏。

一些代碼片段:

public void OnConnection(object application, ext_ConnectMode connectMode, object addInInst, ref Array custom) 
{ 
_applicationObject = (DTE2)application; 
_addInInstance = (AddIn)addInInst; 
if(connectMode == ext_ConnectMode.ext_cm_UISetup) 
{ 
    AddCommandToContextMenu(
         "Team Project", // context menu Name 
         "ClearQuery", // menu reference name 
         "Clear", // display name 
         47, // command icon 
         1); // command placement, 1= first item on top 
       } 
} 

我使用測試 「團隊項目」 菜單名稱。 VSIPLogging告訴我,如果我右鍵點擊我們的TFS團隊項目,這就是菜單的名稱。我也試過其他菜單沒有成功。

這裏是AddCommandToContextMenu功能:

private void AddCommandToContextMenu(string menuName, string commandName, string commandText, int iconId, int position) 
    { 

        CommandBar contextMenu = ((CommandBars)_applicationObject.CommandBars)[menuName]; 

        AddCommand(contextMenu, commandName, commandText, iconId, position); 
    } 



private void AddCommand(CommandBar parent, string commandName, string commandText, int iconId, int position) 

    { 
        Commands2 commands = (Commands2)_applicationObject.Commands; 
        //create the command 
        Command newCommand = commands.AddNamedCommand2(_addInInstance, commandName, commandText, commandText, true, iconId); 
        // add it to parent menu 
        newCommand.AddControl(parent, position); 
    } 

命令欄「父」讓我頗有些例外,如果我仔細看看吧:

accChildCount =「parent.accChildCount」拋出'Microsoft.VisualStudio.PlatformUI.Automation.DeprecatedException'類型的例外情況對於每個其他「acc」值都是相同的。

現在我真的不知道我做錯了什麼,或者我可以嘗試做什麼。我想要做的就是在源代碼控制瀏覽器中有一個上下文菜單條目,它應該調用電動工具命令行EXE來調用它的「撤消不變」功能。

+0

我不會擔心DeprecatedExceptions太多;那些可能就在那裏,因爲MS不希望你使用過時的界面版本。自從它首次發佈以來,它們可能會稍微改變界面,並且出於兼容性原因無法刪除這些屬性。 – takrl 2011-07-06 16:01:39

+0

你的QueryStatus方法在做什麼?該方法確定命令是隱藏還是可見,並且我注意到您指向的文章沒有給出實現它的示例。 – 2011-11-14 20:55:37

+1

我有幾乎相同的代碼,除了我在「IDTExtensibility2.OnStartupComplete」方法中添加自定義命令。 與 「IDTExtensibility2.OnConnection」 方法中,我使用的 「ext_ConnectMode.ext_cm_AfterStartup」 而不是 「ext_ConnectMode.ext_cm_UISetup」: 如果(connectMode == ext_ConnectMode.ext_cm_AfterStartup) this.OnStartupComplete(參照定製); – 2011-11-29 21:42:54

回答

3

我很確定Visual Studio中的Popups是CommnadBarPopup類型的。 另一件我確定的事情是,你需要讓你的命令/控件是全局的,這樣才能保留它們,否則GC會殺死它們。

你需要確保的是,在AddCommand命令名稱不包含點,並在查詢/ Exec的功能確實如此,如:

newCommand = commands.AddNamedCommand2(_addInInstance, commandName, commandText, commandText, true, iconId, ref contextGUIDS, (int)vsCommandStatus.vsCommandStatusSupported + (int)vsCommandStatus.vsCommandStatusEnabled,(int)vsCommandStyle.vsCommandStylePictAndText,vsCommandControlType.vsCommandControlTypeButton); 

很少有東西這裏要注意:

  1. newCommand不像你的代碼那樣是一個局部變量,它被提升爲一個全局變量以保持它的活力(無論如何,這可能不是你的情況,如果這是問題 - 你會第一次看到它,然後它會消失)。
  2. 你忽略了參數,這裏的參考ContextGUIDS是一個新的對象[],它在方法調用之前被聲明來保存命令的guid,它並不重要,只是添加它,重要的是下一個參數(int)vsCommandStatus.vsCommandStatusSupported +(int)vsCommandStatus.vsCommandStatusEnabled下一步給出一些關於你的命令應該是什麼樣的提示(在我們的例子中是按鈕)。

這只是一個起點,plaese參考這篇文章: HOWTO: Create a context menu using a Visual Studio commandbar popup from an add-in

祝你好運!

相關問題