Beépülő modul elkészítése
A Visual Studio.NET beépülő moduljai (Add-ins) igen hasznos kiegészítései a keretrendszernek, hiszen tetszőleges funkciókkal egészíthetjük ki a Visual Studio.NET lehetőségeinek egyébként is széles palettáját.
A modulok általában úgy működnek, hogy az IDE menürendszerének egy tetszőleges menüjében megjelenik egy menüpont, és az erre történő kattintáskor aktiválhatjuk az adott Add-in egy bizonyos funkcióját. A beépített funkciók és a megjelenítendő menüpontok száma tetszőleges lehet.
A mellékelt modul is ebbe a csoportba tartozik, vagyis a Tools menüben megjelenő menüpontra kattintva megjeleníthetünk egy dátumválasztó dialógusablakot, melyből kiválasztva egy dátumot az megjelenik az éppen megnyitott fájl aktuális kurzorpozíciójában.
A megjelenítendő dialógusablak kódja egy DLL-ben található, mely megosztásra kerül a modul és egy, a telepítés folyamán a modullal azonos mappába kerülő Windows-os alkalmazás között. Lássuk, hogy néz ki a modul kódja.
A Connect osztály OnConnection metódusában gondoskodunk arról, hogy a menüpont megjelenjen a Tools menüben. Első lépésben megadjuk a feliratot és hozzárendelünk egy utasítást.
Command command = commands.AddNamedCommand(addInInstance, "SEAddin", "Dátum kiválasztása", "Beszúrja a kiválasztott dátumot", true, 59, ref contextGUIDS, (int)vsCommandStatus.vsCommandStatusSupported+(int)vsCommandStatus.vsCommandStatusEnabled);
A következő lépésben az új menüpontot beillesztjük a sorba.
CommandBar commandBar = (CommandBar)commandBars["Tools"];
CommandBarControl commandBarControl = command.AddControl(commandBar, 1);
Az Exec metódusban kódoljuk le, hogy a menüpontra történő kattintáskor a megadott funkció hajtódjon végre. Ekkor megvizsgáljuk, hogy a parancs neve megegyezik-e a „SEAddin.Connect.SEAddin” karakterlánccal.
if(commandName == "SEAddin.Connect.SEAddin")
{
Ha igen, akkor megjelenítjük a dialógusablakot, és választás esetén meghívjuk az InsertDate metódust, amely beilleszti a dátumot a megfelelő pozícióba.
SEDialog.Dialog1 f = new Dialog1();
f.ShowDialog();
if (f.GetDate() != "")
{
handled = InsertDate(f.GetDate());
...
A fájl aktuális pozíciójába beszúródik az aznapi dátum, és a pontos idő.
((TextSelection)applicationObject.ActiveDocument.Selection).Insert(text,(int)EnvDTE.vsInsertFlags.vsInsertFlagsCollapseToEnd);
Dialógusablak kódja
A dialógusablak egy Windows-os alkalmazás, melynek kimenete nem futtatható állomány, hanem egy DLL.
Ennek megadása a projekt tulajdonságlapján történik.
A dialógusablak egy MonthCalendar kontrol segítségével teszi lehetővé, hogy egy tetszőleges dátumot válasszunk ki, majd ennek megtörténtekor az ablakot bezárjuk. Ennek érdekében a kontrol DataChanged eseményét kell kezelnünk, a dátumot itt eltároljuk egy változóban.
private void monthCalendar1_DateSelected(object sender,DateRangeEventArgs e)
{
date = monthCalendar1.SelectionStart.ToString("yyyy.MM.dd. hh:mm:ss");
Close();
}
Windows-os kliens elkészítése
A kliensalkalmazásban csupán megjelenítjük egy gombnyomásra a dátumválasztó ablakot, majd annak bezárásakor lekérdezzük a megadott dátumot. Ehhez meghívjuk a választó-ablak osztályának GetDate metódusát.
Dialog1 f = new Dialog1();
f.ShowDialog();
if (f.GetDate() != "")
{
textBox1.Text = f.GetDate();
}
A beépülő modul telepítője
A beépülő modulok telepítője alapértelmezésben csak a referenciaként hivatkozott DLL állományát telepíti a célszámítógépre. Annak érdekében, hogy telepítéskor a kliensalkalmazás is erre a célhelyre kerüljön, meg kell adni a kliensalkalmazás EXE állományát, mint kimeneti állományt.
Ehhez válasszuk a telepítő projektjének gyorsmenüjében az Add – Project Output pontot. Ekkor megjelenik egy dialógusablak.
Az ablak Project listájából válasszuk ki a kliensalkalmazás projektjét, majd a Primary Output elemet. Ekkor elérhetjük, hogy a telepítés után a Windows-os alkalmazás EXE állománya is telepítésre kerül, és a referenciaként megadott DLL-t használja.