Making Minor Changes to the Add-in

 < Free Open Study > 

At this point, let's make some minor changes to allow you to follow the progress of the add-in as it connects and disconnects. You'll cause the add-in to respond when you click its menu item. You'll add code to the OnDisconnection method, which will remove the add-in's menu item when the add-in is unloaded. Last, but certainly not least, you'll add some error-handling code to trap any error that may be encountered. I'll say this again and again throughout this book: Don't be stingy with error-handling code. Never leave anything to chance, hoping that your code won't fail. Murphy was an optimist when he said, "Anything that can fail, will fail, and it will fail at the worst time and place possible".

Changes to the Scope of the CommandObj

In order to remove the CommandObj when you disconnect, you have to change the scope of the object by moving it from the OnConnection method to the declarations section of the Connect class, as shown in Listing 2-2. This will make the object global to the class and make the object visible to the OnDisconnection method.

Listing 2-2: Moving the CommandObj to Module Level

start example
 Public Class Connect     Implements IDTExtensibility2     Implements IDTCommandTarget     Dim applicationObject As EnvDTE.DTE     Dim addInInstance As EnvDTE.AddIn     ' **** moved to module level so OnDisconnect can see it *****     Dim CommandObj As Command 
end example

Changes to the OnConnection Method

In Listing 2-3, I make a few minor changes to the OnConnection method. The lines that I change appear in bold. First, I change the test for the ConnectMode argument to ext_ConnectMode.ext_cm_Startup. This will guarantee that the User Interface menu item is not added unless the add-in is really being connected for use at the time the IDE is started. Visual Studio .NET has a default option of placing an add-in's UI in the IDE and leaving it there all of the time, even when the add-in is not running. I do not recommend that you follow this method of operation. I use many add-ins from time to time, but some are used so infrequently that I certainly would not want their menus cluttering the IDE if I had no intention of using them for some period of time.

Listing 2-3: Changes to the OnConnection Method

start example
 Public Sub OnConnection(ByVal application As Object, _                 ByVal connectMode As ext_ConnectMode, _                 ByVal addInInst As Object, _                 ByRef custom() As Object) _                 Implements IDTExtensibility2.OnConnection         applicationObject = CType(application, EnvDTE.DTE)         addInInstance = CType(addInInst, EnvDTE.AddIn)         ' changed test of connectmode from         ' ext_ConnectMode.ext_cm_UISetup     If connectMode = ext_ConnectMode.ext_cm_Startup Then         Dim objAddIn As AddIn = CType(addInInst, AddIn)         ' moved to module level so OnDisconnect can see it     ' Dim CommandObj As Command     MsgBox("On Connection")         Try             CommandObj = _                 applicationObject.Commands.AddNamedCommand(objAddIn, _                 "MyCommand1", _                 "Click Me", _                 "Executes the command for MyAddinTest1", _                 True, 59, Nothing, 1 + 2)             CommandObj.AddControl( _                 applicationObject.CommandBars.Item("Tools"))         Catch e As System.Exception         MsgBox("Can't place toolbutton, error: " & _                     e.Message, MsgBoxStyle.Critical, _                     "MyAddinTest1")         End Try     End If End Sub 
end example

Next, I comment the original CommandObj Dim statement, so that you can see the point from which I moved it.

Finally, I add a couple of message boxes to trace my progress through the connection process and to inform me of any possible error encountered in placing the tool button.

Now I add the code to the OnDisconnection method to remove the CommandObj (menu item) once the add-in is unloaded. These changes appear in bold in Listing 2-4.

Listing 2-4: Changes to the OnDisconnection Method

start example
 Public Sub OnDisconnection( _               ByVal RemoveMode As ext_DisconnectMode, _               ByRef custom() As Object) _               Implements IDTExtensibility2.OnDisconnection       Try          ' display a message to tell what we are about to do          MsgBox("Disconnect, remove Tool Button", _                  MsgBoxStyle.Information, "MyAddinTest1")          ' remove the add-in command button          CommandObj.Delete()       Catch e As System.Exception          ' if we should fail to remove the button, display the error          MsgBox("Error in Disconnect: " & _               e.Message, _               MsgBoxStyle.Critical, _               "MyAddinTest1")       End Try End Sub 
end example

 < Free Open Study > 

Writing Add-Ins for Visual Studio  .NET
Writing Add-Ins for Visual Studio .NET
ISBN: 1590590260
EAN: 2147483647
Year: 2002
Pages: 172
Authors: Les Smith © 2008-2017.
If you may any questions please contact us: