Kezdjük a komponens elkészítésével a megoldást. Ehhez válasszuk a File - New – Project menüpontot. A megjelenő ablakból a Visual C# elemei közül kattintsunk a Windows Control Library elemre. A project neve legyen LogLibrary.
Ekkor létrejön a kerete az alkalmazásunknak, benne alapértelmezés szerint egy UserControl1.cs-vel, melyben találunk egy olyan kontrolt, amely a UserControl-ból származik. Ez viszont nem felel meg a mostani megoldáshoz, mivel nekünk komponensre van szükségünk, mely Component-ből származik. Ezért a Solution Explorer-ben válasszuk ki a UserControl1.cs-t és töröljük, majd a Project – Add Component menüpont választásával adjunk a projekthez egy új komponenst LogComponent névvel.
A megvalósításhoz szükségünk lesz két property-re, mely a napló állomány nevét tárolja, valamint arról rendelkezik, hogy legyen-e automatikus dátum és időpont beírás minden egyes bejegyzéshez vagy sem.
E két property értékének tárolásához szükség van két változóra.
private string FFileName;
private bool FDateTime;
Ezt követően létrehozhatjuk a két property-t. LogFile névvel hozzuk létre az állomány nevet tartalmazó property-t.
[Category("Log")]
public string LogFile
{
get { return FFileName; }
set { FFileName = value; }
}
A következő lesz a logikai property, mely alapján a komponens eldönti, hogy kell-e dátumot és időt tárolni vagy sem.
[Category("Log")]
public bool AddDateTime
{
get { return FDateTime; }
set { FDateTime = value; }
}
Végül létrehozunk egy Append nevű függvényt, mellyel az új bejegyzést helyezhetjük el a napló állományba. Ennek paraméterként kell megadni azt a sztringet, mely a tárolandó esemény leírását takarja.
A TXT állomány kezeléséhez egy StreamWriter osztályt használunk. A konstruktorának első paramétereként az állomány nevét adjuk meg. A második paraméter igaz értéke esetén, ha már létezik a kérdéses állomány, akkor az hozzáírásra lesz megnyitva. Hamis érték esetén a létező állomány törlésre kerülne és egy új lenne létrehozva.
public void Append(string message)
{
StreamWriter sw = new StreamWriter(FFileName, true);
Ha szükség van dátum és idő tárolására, akkor a StreamWriter osztály Write függvényével beírjuk ezt az adatot a TXT-be.
if (FDateTime)
{
sw.Write(DateTime.Now.ToString("G") + ": ");
}
Végül a WriteLine hívásával beírjuk a szükséges üzenet szövegét is, valamint egy új sor jelet, így a következő Append hívása már a TXT következő sorába ír.
Legutolsó lépésként zárjuk a TXT állományt.
Ezek után fordítsuk le a projektet, így létrejön a LogLibrary.dll.
Mielőtt most továbblépnénk és elkészítenénk a komponenst felhasználó teszt alkalmazást, előbb vegyük fel a komponenst a ToolBox valamely palettájára. Ehhez kattintsunk jobb gombbal a ToolBox-on és válasszuk a Customize ToolBox menüpontot. A megjelenő ablakban a .NET Framework Components lapon a Browse gombbal keressük meg a LogLibrary.dll-t. Kiválasztás után megjelenik a LogComponent a listában. Az előtte álló CheckBox-ot jelöljük ki, majd OK. Ezzel felvettük a komponenst a ToolBox-ra, most már bármelyik alkalmazásban használhatjuk azt.
Nyissunk egy új, Windows alkalmazás projektet, tegyünk fel egy LogComponent komponenst, állítsuk be igény szerint a FileName és AddDateTime property-jét, valamint helyezzük el a programban azokra a helyekre az Append függvény hívását, ahol erre csak szükség van.
logComponent1.Append(textBox1.Text);