Listing 1 Add Task Event Handler

private void txtNewTask_KeyDown(object sender, KeyEventArgs e)
{
	if (e.KeyCode == Keys.Enter)
	{
		string newItem = txtNewTask.Text.Trim();
		if (newItem == string.Empty)
			return;

		AddTask(newItem);
		txtNewTask.Text = string.Empty;

		e.Handled = true;
	}
}

private void AddTask(string text)
{
	ListViewItem item = new ListViewItem(text);
	item.Group = lvwTasks.Groups[0];
	lvwTasks.Items.Add(item);
}

Listing 2 CTC File

MENUS_BEGIN
guidTasklist_SampleCmdSet:ToolbarMenu,/* == Menu */
guidTasklist_SampleCmdSet:ToolbarMenu,/* == Relative to Group*/
0x0100,/* == Priority */
TOOLWINDOWTOOLBAR, /* == Menu Type*/
"Toolbar"; /* == Text*/
MENUS_END

NEWGROUPS_BEGIN
guidTasklist_SampleCmdSet:ToolbarMenuGroup, /* == New Group */
guidTasklist_SampleCmdSet:ToolbarMenu, /* == Parent Group*/
0x0100; /* == Priority */
NEWGROUPS_END

BUTTONS_BEGIN
guidTasklist_SampleCmdSet:cmdidAddTask, /* == Command */
guidTasklist_SampleCmdSet:ToolbarMenuGroup, /* == Parent Group */
0x0100, /* == Priority */
guidTasklist_SampleCmdSet:bmpPic2, /* == Image */
BUTTON, /* == Button Type */
, /* == Visibility */
"Add Task"; /* == Text */
BUTTONS_END

Listing 3 Initialize() Method

protected override void Initialize()
{
Trace.WriteLine (string.Format(CultureInfo.CurrentCulture,
"Entering Initialize() of: {0}",
this.ToString()));
base.Initialize();

	// Add our command handlers for menu (commands must exist in the .ctc file)
	MSVSIP.OleMenuCommandService mcs = GetService(typeof(IMenuCommandService)) as
	 MSVSIP.OleMenuCommandService;
if ( null != mcs )
{
// Create the command for the tool window
CommandID toolwndCommandID = new CommandID(GuidList.guidTasklist_SampleCmdSet,
 (int)PkgCmdIDList.cmdidTasklistSample);

MenuCommand menuToolWin = new MenuCommand( new EventHandler(ShowToolWindow),
 toolwndCommandID);
mcs.AddCommand( menuToolWin );
	}
}

Listing 4 TaskCreatedEventArgs Class

public class TaskCreatedEventArgs : EventArgs
{
	private string m_description;
	private string m_priority;

	public TaskCreatedEventArgs(string desc, string pri)
	{
		m_description = desc;
		m_priority = pri;
	}

	public string Description
	{
		get	{ return m_description; }
	}

	public string Priority
	{
		get { return m_priority; }
	}
}

Listing 5 Rewriting AddTask()

private void AddTask(object sender, EventArgs e)
{
	AddTaskDialog atd = new AddTaskDialog();

	if (atd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
	{
		string description = atd.Description;
		string priority = atd.Priority;

		if (OnTaskCreated != null)
			OnTaskCreated(this,
new TaskCreatedEventArgs(description,
 priority));
}
}

Additional Code for this Article zip file ~94 KB