
A mellékelt példa használatához fordítsa le a projekteket, futtassa le a ReCreateCommands.reg állományt, majd indítsa újra a Visual Studio.NET keretrendszert.
Az elkészítendő modul a Visual studio.NET IDE Tools menüjében jelenik meg legfelső menüpontként. A menüpont kiválasztásakor megjelenítünk egy dialógus ablakot (FormFileAddin projekt), melyben megadhatjuk, hogy csak egy Text állományt szeretnénk megnyitni szerkesztésre (ekkor jelölt a CheckBox kontrol), vagy egy új Form, UserControl, vagy CSharp kódfájl állományát szeretnénk a projekt részévé tenni.
A beépülő modul létrehozását egy önálló projektfajta segíti, mely az Other Projects csoportban található, az Extensibility Projects alcsoportban. Létrehozásához válasszuk a Visual Studio.NET Add-in típust. Egy varázsló segítségével haladhatunk végig a létrehozás folyamatán.
A hatlépéses varázsló negyedik paneljén meg kell adnunk, hogy a modul rendelkezzen felhasználói felülettel, valamint, hogy az IDE indulásakor töltődjön be. A varázsló többi ablaka opcionális kérdéseket tesz fel a modullal kapcsolatban. Ezeket átugorhatjuk. A létrehozott projekthez kapcsolódik egy telepítő alkalmazás projektje is, melyre most példánkban nem lesz szükség.
A projekt Connect.cs állománya tartalmazza a szükséges osztály deklarációját, melynek jelentős, és felhasznált metódusait most elemezzük.
A projekt fordításakor a modul assembly-je COM komponensként regisztrálódik.
Az osztály OnConnection metódusában történik meg a menüpont létrehozása, majd elhelyezése a menürendszerben. A legtöbb művelet kódját készen kapjuk, csupán apró kiegészítéseket kell itt eszközölnünk, a modul megjelenésének testre szabása érdekében.
A létrehozás a Commands osztály statikus AddNamedCommand metódusával történik, melynek második paramétere a parancs neve, harmadik paraméterben kell megadnunk a menüponton megjelenő szöveget.
Command command = commands.AddNamedCommand(addInInstance, "InsFileAddin", "Állomány beszúrása", "Executes the command for InsFileAddin", true, 59, ref contextGUIDS, (int)vsCommandStatus.vsCommandStatusSupported+(int)vsCommandStatus.vsCommandStatusEnabled);
Majd a parancs bekerül a parancslistába, a következő módon:
CommandBarControl commandBarControl = command.AddControl(commandBar, 1);
A Tools menüben megjelenő menüpontra kattintva felbukkan a dialógusablak, amelynek típusa Form1. Az osztály két változója lényeges, melyek tartalmazzák a Form-on megadott adatokat. A name változóban adjuk meg az állomány nevét, projektállomány megadásakor template változó tartalmazza a létrehozandó elem elérési útvonalát.
A felhasználandó mintaállományok a VS.NET mappájában találhatóak, a következő elérési útvonalon:
<winroot>:\\Program Files\Microsoft Visual Studio .NET\Vc#\CSharpProjectItems\
A példában a felbukkanó ablak listájából választhatjuk ki, hogy egy kódfájlt, egy Form-os, vagy egy felhasználói kontrolt adunk a projekthez. A felhasználandó állományok: NewCSharpFile.cs, CSharpAddWinFormWiz.vsz, és CSharpAddUserControlWiz.vsz. Amikor kiválasztás és a névmegadás megtörténik, az OK gombbal indítható a létrehozás. Ekkor a Form bezáródik, de nem semmisül meg.
A modul Exec metódusában meghívjuk az InsertFile metódust, melyben elvégezzük a létrehozást. A kulcsszerep az applicationObject nevű objektumé, ezt használjuk. Első lépésben ellenőrizzük, hogy van-e megnyitott solution. Ha nincs, hibaüzenetet adunk.
if (!applicationObject.ItemOperations.DTE.Solution.IsOpen)
{
MessageBox.Show("Nincs megnyitva projekt!");
return;
}
Ellenkező esetben példányosítjuk a Form1 osztályt, majd megjelenítjük a dialógusablakot.
f = new Form1();
f.ShowDialog();
Ha a név mezőt kitöltöttük, és a template változó nem tartalmaz értéket (vagyis csak egy szimpla szöveges állományt akarunk megnyitni), akkor a következőt tesszük:
if (f.name != "")
{
if (f.template == "")
{
applicationObject.ItemOperations.NewFile("General\\Text File", f.name,Constants.vsViewKindCode);
}
A NewFile metódussal nyitunk meg egy új szöveges állományt, mely csak megnyílik, de nem lesz a projekt része.
A hozzáadáskor lekérdezzük egy objektumba a solution első projektjét.
...
EnvDTE.Project actproject = applicationObject.ItemOperations.DTE.Solution.Projects.Item(index);
Majd az AddFormTemplate metódussal (első paramétere a template elérési útvonala, második paramétere a fájl neve) létrehozunk egy új projektelemet, és a projekthez adjuk.
actproject.ProjectItems.AddFromTemplate(f.template,f.name);