Create a Visual Studio add-in with contextmenu and selected text as input
When working with a new way of storing settings in a database. I was frustrated how much work it was to check the value of setting from code. So I deceided to make my life a bit easier by creating a VS2008 contextmenu add-in. With this add-in I can select text within VS and use the value of the selected text within the add-in popup. The hardest part was figuring out how to create a contextmenu and how to use the selected text as input value.
In this blogpost I will show how to create a Visual Studio contextmenu add-in and pass the selected text to the pop-up. I’m not going to explain how to create an add-in you can easily find articles about this on MSDN or blogs (just try Google).
Now let’s get started. Create an new Visual Studio add-in project and add the following code to the OnConnetion Method within the Connect.cs. This code will insert add the contextmenu.
[code language=’c#’]
_applicationObject = (DTE2)application;
CommandBars cBars = (CommandBars)_applicationObject.CommandBars;
CommandBar editorCommandBar = (CommandBar)cBars[“Editor Context Menus”];
CommandBarPopup editPopUp = (CommandBarPopup)editorCommandBar.Controls[“Code Window”];
Command command = commands.AddNamedCommand2(_addInInstance,
“GetSetting”, “Bekijk Setting”, “Executes the command for test”, true, 733, ref contextGUIDS,
(int)vsCommandStatus.vsCommandStatusSupported + (int)vsCommandStatus.vsCommandStatusEnabled,
(int)vsCommandStyle.vsCommandStylePictAndText,
vsCommandControlType.vsCommandControlTypeButton);
[/code]
Then to get the selected text I use the following method within the Exec of the Connect.cs and pass the selected text (return value) to a property of a Windows Form pop-up.
[code language=’c#’]
private string GetSelection()
{
string setting = “”;
//Check active document
if (_applicationObject.ActiveDocument != null)
{
//Get active document
TextDocument objTextDocument = (TextDocument)_applicationObject.ActiveDocument.Object(“”);
TextSelection objTextSelection = objTextDocument.Selection;
if (!String.IsNullOrEmpty(objTextSelection.Text))
{
//Get selected text
setting = objTextSelection.Text;
}
}
return setting;
}
[/code]
Hope it helps.
Cheers,
Pieter