A mellékelt példában bemutatandó Excel ActiveX komponens használatához fel kell csak dobnunk azt a ToolBox elemei közül a Form-ra, és beállítanunk a szükséges tulajdonságokat. A komponens az Office csomag Web Components együttesének részeként települ fel a rendszerünkbe és – verziótól függően – az MSOWC.DLL vagy az MSOWC10.DLL állományokban található. Az Office XP telepítésekor mindkét DLL rendelkezésünkre áll.
Ahhoz, hogy a komponens elérhető legyen a ToolBox-ban, fel kell azt vennünk oda. Ehhez kattintsunk a ToolBox paneljén az egér jobb gombjával, majd a megjelenő menüből válasszuk a Customize ToolBox menüpontot. A felbukkanó ablak COM Components füle alatt keressük meg a Microsoft Office Spreadsheet 9.0 elemet, majd jelöljük be a mellette található CheckBox-ot. Ezt követően már a ToolBox tartalmazza a kontrolt.
A Microsoft Office Spreadsheet 10.0 komponens valamilyen okból nem működik megfelelően együtt a .NET 1.0 futtatórendszerrel, ezért választottuk a 9.0 verziót.
A kontrolt feldobva a Form-ra megjelenik egy Excel munkalap kevesebb funkciót tartalmazó mása. A cellákat szerkeszthetjük, formázhatjuk, az eredményt állományba exportálhatjuk. A műveletek többségéhez egy-egy esemény kapcsolható, melyek elkaphatók, információik lekérdezhetők. Lássuk, milyen eseményekről beszélhetünk.
Az első a Command nevet viseli, és minden olyan esetben létrejön, amikor az eszközpalettáján található funkciók közül valamelyiket kiválasztjuk és végrehajtjuk. Ehhez deklarálhatunk egy kezelőt, melynek típusa AxOWC.IWebCalcEventSink_CommandEventHandler.
this.axSpreadsheet1.Command += new AxOWC.IWebCalcEventSink_CommandEventHandler(this.Command);
A kezelőmetódus pataméterei közül a második speciális, típusa AxOWC.IWebCalcEventSink_CommandEvent.
private void Command(object sender, AxOWC.IWebCalcEventSink_CommandEvent e)
{
statusBar1.Text = "Parancs futása elkezdődött...";
}
Amikor valamely cella szerkesztését befejeztük és a fókusz már nincs a cellán, akkor az ENDEDIT esemény fut le.
this.axSpreadsheet1.EndEdit += new AxOWC.IWebCalcEventSink_EndEditEventHandler(this.EndEdit);
A kezelőmetódus paramétere AxOWC.IWebCalcEventSink_EndEditEvent típusú. A paraméter rendelkezik egy tagobjektummal, melynek neve EVENTINFO, és amelyen keresztül információk szerezhetők a cellával kapcsolatban.
A tagobjektum Range elemének Address property-jéből egy karakterlánc formájában lekérdezhető, hogy melyik celláról van szó. Az eredmény lehet például „A1”, stb.
Az EDITDATA property lehetőséget ad arra, hogy a cellába beírt adatot lekérdezzük. Az eredmény itt is egy karakterlánc lesz. Az EndEdit esemény kezelője tehát a következőképpen fest:
private void EndEdit(object sender, AxOWC.IWebCalcEventSink_EndEditEvent e)
{
statusBar1.Text = e.eventInfo.Range.Address + " cella adata: " + e.eventInfo.EditData;
}
Ha valamely cella tartalmát szerkesztjük, de a szerkesztés műveletét megszakítjuk azzal, hogy megnyomjuk az ESC gombot, vagy megváltoztatjuk az aktív cellát egy egérkattintással (lényeg hogy az ENTER billentyű nem kerül lenyomásra), akkor a CALCELEDIT esemény következik be.
this.axSpreadsheet1.CancelEdit += new AxOWC.IWebCalcEventSink_CancelEditEventHandler(this.CancelEdit);
Az eseménykezelő pedig AxOWC.IWebCalcEventSink_CancelEditEventHandler típusú:
private void CancelEdit(object sender, AxOWC.IWebCalcEventSink_CancelEditEvent e)
{
statusBar1.Text = e.eventInfo.Range.Address + " cella törölve!";
}
A cellák valamelyikén kattintva egy újabb esemény generálódik, melynek neve CLICKEVENT.
this.axSpreadsheet1.ClickEvent += new AxOWC.IWebCalcEventSink_ClickEventHandler(this.ClickEvent);
A kezelőfüggvényt IWebCalcEventSink_ClickEventHandler típusúra kell választanunk.
private void ClickEvent(object sender, AxOWC.IWebCalcEventSink_ClickEvent e)
{
statusBar1.Text = "Aktív cella: " + e.eventInfo.Range.Address;
}