YOUR LOGO Win Forms Slide od Martin Osovský
YOUR LOGO Validace dat pro správné použití dialogu je nutné data před nastavením DialogResult u na OK validovat, aby bylo na obsah příslušných vlastností spolehnutí každý ovládací prvek má událost Validating, v jejímž handleru se provede validace událost Validating se vyvolá, když má prvek nastavenu vlastnost CausesValidation na true a ztratí fokus ve prospěch prvku se stejným nastavením handler má parametr typu CancelEventArgs, jejíž vlastnost Cancel se při neúspěchu nastaví na true pokud se validace povede, vyvolá se událost Validated
YOUR LOGO Validace dat vložená data v ovládacím prvku se obvykle zkontrolují pomocí regulárního výrazu (metoda IsMatch) je možno použít prvek MaskedTextBox, který má ve vlastnosti Mask řetězec s požadovaným formátem, ze jehož znaky se zobrazí nápovědné znaky, např. 00->L<LL-0000 : 12-Jan-1997 (__-___-____)
YOUR LOGO Validace dat na formuláři může být komponenta ErrorProvider, která umožňuje informovat uživatele o chybě metoda SetError má parametr typu komponenta, jejíž hodnotu se nepodařilo nastavit a řetězec když je třeba kontolovat více ovládacích prvků, použije se kontejnerový prvek jako třeba GroupBox
YOUR LOGO Validace dat validaci lze uměle vyvolat pomocí metod formuláře Validate a ValidateChildren ValidateChildren má parametr, který umožňuje omezit, které druhy ovládacích prvků se mají validovat vlastnost AutoValidate umožňuje nastavit, aby se validovalo pouze po zavolání těchto metod (a nikoliv, když ovládací prvky ztratí fokus) hodnotou AutoValidate.EnableAllowFocusChange
YOUR LOGO Kreslení podporu kreslení zajišťují třídy ze jmenného prostoru System.Drawing základní třídou je třída Graphics ke kreslení na formulář je nutno si vyžádat instanci třídy Graphics voláním metody CreateGraphics
YOUR LOGO Událost Paint aby se nakreslené objekty správně překreslovaly při změnách formuláře je třeba kreslení provádět v obsluze události Paint událost Paint se vyvolá vždy, když se formuláš překresluje lze ji vyvolat v programu metodami Invalidate, Update nebo Refresh voláním metody SetStyle formuláře s parametrem ControlStyles.ResizeDraw lze zařídit, aby obrázek s formulářem měnil i velikost (událost Paint se vyvolá i při přesunu)
YOUR LOGO Barvy, štětce, pera... barvy jsou reprezentovány strukturou Color, která obsahuje -statické vlastnosti pro známé barvy ( YellowGreen ) -metody pro vytváření barev pomocí různých reprezentací (např. FromArgb ) -metoda FromKnownColor s enumem KnownColors (systémové barvy, např. Highlight) -třída SystemColors
YOUR LOGO Štětce (brushes) štětce slouží k vyplňování uzavřených objektů barvami, bitmapami nebo vzory různé druhy reprezentované různými třídami -SolidBrush: inicializován barvou -TextureBrush: inicializován bitmapou (objekt Bitmap) -HatchBrush: inicializován některým dvoubarevným vzorem (typ HatchStyle) a dvěma barvami -LinearGradientBrush: plynulý přechod mezi dvěma barvami -PathGradientBrush: přechod podél cesty
YOUR LOGO Pera (pens) kreslení čar, polygonů a tvarů je možno nastavovat celou řadu vlastností jako -štětec ( Brush ) -konce čar ( EndCap, StartCap ) -čárování nebo čerchování ( DashStyle, DashPattern ) -zarovnání, spoje a podobně
YOUR LOGO Cesty a tvary tvary se kreslí pomocí metod třídy Graphics -metody DrawXXX: nakreslí příslušný tvar nevyplněný -metody FillXXX: nakreslí tvar, který je možno vyplnit vyplněný příslušným štětcem k disposici jsou například tvary Arc, Bezier, Curve, Lines (neuzavřené) a Ellipse, Rectangle, Polygon, Pie a ClosedCurve (uzavřené) kreslí se na základě nejrůznějších specifických vlastností
YOUR LOGO Cesty cesta, objekt typu GraphicsPath je v podstatě kontejner pro jednu nebo více podcest (uzavřený tvar nebo posloupnost spojených čar či oblouků) připomíná Graphics, ale -není možné do ní kreslit na jakékoliv pozice -je nutno ji vykreslit na objekt Graphics metodou DrawPath (nemá vlastní vykreslovací prostor) tvary se do ní přidávají metodami tvaru AddXXX metody StartFigure a CloseFigure
YOUR LOGO Obrázky jsou reprezentovány zejména třídou System.Drawing.Image instanci této třídy je možné vytvořit například statickou metodou FromFile obrázek lze vykreslit metodou DrawImage třídy Graphics této metodě je možné předávat parametry, které obrázek vykreslí nějak transformovaný (do nějakého tvaru, zvětšený nebo zmenšený ap.) nějaké transformace je také možné provádět přímo na obrázku (metoda RotateFlip aj. )
YOUR LOGO Fonty, řetězce kreslení řetězců se provádí metodou DrawString té se předá řetězec, třída reprezentující font, štětec a nakonec poloha textu fonty jsou reprezentovány třídou FontFamily (např. Times New Roman), jednotlivé konkrétní tvary (jako TMR bold 10b) pak třídou Font
YOUR LOGO Data binding některé ovládací prvky zobrazují data uložená v jiných objektech data lze zobrazovat automaticky pomocí spojování prvků s datovými zdroji (data sources) spojovat lze -vlastnosti ovládacích prvků sjednoduchými složkami zdrojů (objektů): simple binding -nebo ovládací prvky s kolekcemi: complex binding -jednostranně nebo oboustranně
YOUR LOGO Simple binding každý ovládací prvek obsahuje kolekci objektů typu Binding, které obsahují vazbu některé jejich vlastnosti ke složce nějakého objektu tato kolekce je ve vlastnosti DataBindings třída Binding má konstruktor se třemi parametry -jméno vlastnosti ovládacího prvku ( Property ) -referenci na objekt zroje ( DataSource ) -tzv. navigation path ke složce zdroje ( DataMember )
YOUR LOGO Simple binding navigation path je řetězec jmen oddělených tečkou představuje složku nebo vlastnost zdroje, případně, složku objektu, který je obsažen v dané složce atd. “Stars.Planets.Moons.Mass” je-li zdrojem například DataSet, může to být jméno tabulky a jméno sloupce “Products.ProductName”
YOUR LOGO Simple Binding pokud je zdrojem kolekce, je prvek svázán se složkou jednoho objektem v kolekci formulář má složku BindingContext, která pro každou vazbu obsahuje objekt odvozený od typu BindingManagerBase -CurrencyManager: obaluje skutečný zdroj, vrací jeden prvek a umožňuje mezi prvky přecházet -PropertyManager: pokud zdroj není kolekce, obsahuje prostě příslušný objekt
YOUR LOGO Binding Context CurrencyManager -má složku Position: index aktuálního objektu -Count: celkový počet -Current -AddNew dá se získat z vlastnosti BindingContext pomocí indexeru, který má za parametr zdroj dat, případně navigation path ke složce ke každé kolekci je jenom jeden kontext
YOUR LOGO Complex binding některé ovládací prvky mohou být propojeny s kolekcí (ListBox, ComboBox, DataGridView), za tím účelem mají speciální složky -DataSource: objekt kolekce -DisplayMember: složka prvku kolekce, která se má zobrazit -ValueMember: hodnota, která je svázána s vybranou položkou (SelectedValue)
YOUR LOGO Complex binding běžné kolekce nepodporují notifikace o změnách v kolekci, což způsobuje, že se tyto změny neprojevují na provázaných komponentách IBindingList a IBindingList : rozhraní umožňující obousměrnou vazbu BindingSource: komponenta, která umožňuje zapouzdřit již existující kolekci
YOUR LOGO DataGridView tabulková komponenta pro zobrazování dat objekt nesoucí data se k ní přiřadí vlastností DataSource, resp. DataMember může zobrazovat data z -pole -DataTable, DataView -DataSet, DataViewManager -IList, IListSource -jakákoliv generická kolekce
YOUR LOGO Poznámky k DataGridView u pole je se v tabulce zobrazí první vlastnost každé položky (délka u řetězců!) u tabulky v DataSetu je se DataSource nastaví na dataset a DataMember na jméno tabulky umí navigovat přes relace v datasetu složky, které nechceme zobrazovat u generických kolekcí je možno označit atributem [Browsable(False)]
YOUR LOGO DataGridView sloupce se dají vytvořit automaticky podle jmen a datových typů položek prvků datového zdroje nebo se dají vytvořit ručně pomocí tříd dědících od třídy DataGridViewColumn a jejich vlastností (např. DataGridViewButtonColumn) sloupce jsou ve vlastnosti Columns třídy DataGridView
YOUR LOGO Vícevláknová rozhraní dlouho trvající blokující operace mohou způsobit nepříjemné zablokování aplikace řešení je přesunout tyto operace z UI vlákna aplikace do tzv. pracovního vlákna pracovní vlákno, ale nemůže přistupovat přímo k prvkům uživatelského rozhraní řešením je použít thread-save metody třídy Form -Invoke, BeginInvoke, EndInvoke -CreateGraphics
YOUR LOGO Vícevláknová rozhraní existuje pomocná komponenta BackgroundWorker metoda RunWorkerAsync: inicializuje a spustí příslušnou operaci delegáti (události) -DoWork -ProgressChanged -RunWorkerCompleted
YOUR LOGO Vícevláknová rozhraní komunikace s UI vláknem se provádí metodou ReportProgress (jen když je vlastnost WorkerReportsProgress na true) zavolání této metody vyvolá událost, na niž je možno v UI vlákně reagovat, předaná informace (číslo nebo jakýkoliv objekt) je ve vlastnosti UserState nebo ProgressPercentage třídy ProgressChangedEventArgs