C# - MonthCalendar kontrol felhasználási lehetőségei

forráskód letöltése
A MonthCalendar kontrollal egy olyan adatbeviteli eszközt kapunk, mely segíti a felhasználót egy dátum érték vizuális megadására. A kontrol egyszerre megjeleníti egy-egy hónap napjait, vagy akár egyszerre több hónapot is igény szerint. A felhasználónak már nincs is más dolga, mint választani.
Azt hogy egy időben hány hónap legyen látható, azt a CalendarDimension property-ben adhatjuk meg. Ez egy Size struktúra típusban tárolja az értékeket, így ennek Width és Height property-ébe kerül tulajdonképpen az, hogy a naptár hány hónapja jelenjen meg vízszintesen és függőlegesen.
Találunk egy BoldedDates névre hallgató property-t is e komponensnél. Ez egy olyan tömb típusú property, melynek minden eleme egy-egy dátumot tárol. Az itt megadott dátumokat a naptár komponensünk úgy jelzi ki, hogy az adott napnak számát vastag betűvel jeleníti meg. Ehhez hasonló a MonthlyBoldedDates property, viszont az itt felsorolt dátumok minden hónapban automatikusan ismétlődnek, vagyis a megadott dátumokból valójában csak az adott nap lesz az érdekes, mivel e nap minden hónapban vastaggal lesz jelölve. Ezekhez hasonlóan az AnnuallyBoldedDates property-ben megadott dátumok pedig évenként ismétlődnek, vagyis a megadott dátumokból a hónap és a nap érdekes, mivel e nap minden évben vastaggal lesz jelölve.
Fenti dátumokat természetesen programból is hozzáadhatjuk ezekhez a tömbökhöz. Ehhez az AddBoldedDate, AddMonthlyBoldedDate és a AddAnnuallyBoldedDate függvényeket használhatjuk.
A RemoveAllBoldedDates függvénnyel eltávolíthatjuk az összes vastaggal jelölt napot a naptárból, míg a RemoveAllMonthlyBoldedDates függvénnyel az összes napot, melyet a MonthlyBoldedDates property-n keresztül adtunk meg. Az évenkénti ismétlődő napok eltávolítását pedig a RemoveAllAnnuallyBoldedDates függvényre bízhatjuk. Ezek használata után még meg kell hívnunk az UpdateBoldedDates függvényt is ha azt szeretnénk elérni, hogy a változása azonnal látható is legyen naptárunkban.
A MonthCalendar alján megjelenik egy sáv, melyben láthatjuk az aktuális nap dátumát. Ha erre kattintunk, akkor a naptár is erre a napra ugrik. Ha erre a sávra nem lenne szükségünk, akkor a ShowToday logikai property-t állítsuk hamisra. Az aktuális nap dátumát a TodayDate property-n keresztül le is kérdezhetjük DateTime típusban.
A naptárban egy piros kör jelzi az aktuális napot. Ennek a jelölésnek a láthatóságát szintén befolyásolhatjuk egy property állításával. Ez a ShowTodayCircle lesz, mely szintén logikai típusú.
Minden hét előtt megjeleníthetjük annak sorszámát, ha a ShowWeekNumbers property-t igazra állítjuk.
Amikor a felhasználó rákattint a MonthCalendar-ra és megváltoztatja az aktuálisan kijelölt dátumot, akkor jön létre a DateChanged esemény. Itt paraméterként kapunk egy e változót, mely DateRangeEventArgs típusú. Ennek start nevű property-éből tudható meg a kiválasztott dátum. Mivel a MonthCalendar lehetőséget biztosít arra is, hogy egy dátum tartományt jelöljön ki a felhasználó, így ebben az esetben a start a kezdő dátumot, míg az end property a befejező dátumot tartalmazza. Ha nem a DateChanged eseménynél vagyunk, akkor a MonthCalendar SelectionStart és SelectionEnd property-eiből ugyanezeket a dátum értékeket lekérdezhetjük. Itt rendelkezésünkre áll még egy SelectionRange nevű és SelectionRange osztály típusú property is, mely tartalmaz egy Start és End property-t, melyből épp úgy megtudhatjuk a kezdő és befejező dátumot.
A MaxSelectionCount property-vel szabályozhatjuk, hogy hány nap jelölhető ki egyszerre. Ennek alapértéke hét. Ha azt szeretnénk, hogy a felhasználó csak egy dátumot és ne egy tartományt adhasson meg, akkor ennek értékét állítsuk egyre.
A MinDate és MaxDate dátum típusú property-k segítségével szabályozhatjuk, hogy a MonthCalendar-ban melyik lehet a legkisebb és legnagyobb kiválasztható dátum.
A MonthCalendar objektum több részre bontható: vannak a hónap napjai, van mai dátum kijelzése, a hetek sorszáma, az évszám és hónap kijelzése, stb. Ha tudnunk kell, hogy a komponens X, Y pontjában melyik objektum található, akkor ennek meghatározásában segít bennünket a HitTest függvény, melynek vagy egy Point, vagy egy X, Y számként adjuk meg a kérdéses koordinátát.
A függvény egy HitTestInfo osztályt ad vissza. Ennek három mezője van mely érdekes lehet számunkra. A HitArea mezőből tudhatjuk meg, hogy a komponens mely területén található a megadott koordináta. Ennek értéke a következők egyike lehet: CalendarBackground, Date, DayOfWeek, NextMonthButton, NextMonthDate, Nowhere, PrevMonthButton, PrevMonthDate, TitleBackground, TitleMonth, TitleYear, TodayLink, WeekNumbers
A Point mezőből megkapjuk a vizsgált koordináta pontját, valamint a Time mezőből a vizsgálat időpontját.