Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

V 1.0 Programozás III. További ablakok készítése Továbbított események.

Hasonló előadás


Az előadások a következő témára: "V 1.0 Programozás III. További ablakok készítése Továbbított események."— Előadás másolata:

1 V 1.0 Programozás III. További ablakok készítése Továbbított események

2 V 1.0ÓE-NIK, További ablakok készítése Az ablakokat kétféle módon használhatjuk: –Modális megjelenítés: amíg a felhasználó a modális ablakot be nem zárja, nem aktiválhat más ablakot Figyelmeztetés megjelenítése Hibaüzenetek közlése Megerősítések kérése Adatok bekérése –Nem modális megjelenítés: más ablakokkal párhuzamosan használható Lehetőségek: –MessageBox osztály előre elkészített dialógusablakai (csak modális) –Microsoft.Win32 névtér dialógusablakai (csak modális) –Saját készítésű ablakok

3 V 1.0ÓE-NIK, MessageBox osztály Funkció: olyan üzenetablak megjelenítése, amely tartalmazhat üzenetet, gombokat és ikonokat Nem hozunk létre példányt, hanem az osztály statikus Show tagfüggvényét hívjuk –A függvény paraméterei határozzák meg, hogy milyen szöveg, gomb és ikon jelenik meg –A visszatérési értéke a MessageBoxResult felsorolás egy eleme, és a bezárás módjáról ad információt Használata: MessageBox.Show("Egysoros üzenet"); MessageBox.Show("Többsoros\nüzenet\nfejléccel", "Üzenet fejléccel");

4 V 1.0ÓE-NIK, MessageBox paraméterek I. Megjelenítendő gombok: A megjelenítendő gombokat a MessageBoxButton felsorolás egy elemével határozzuk meg: A Show visszatérési értéke többnyire a megnyomott gomb nevével egyező nevű MessageBoxResult felsoroláselem: –MessageBoxResult.OK, MessageBoxResult.Cancel, MessageBoxResult.Yes… –A piros X gombbal való bezárás többnyire MessageBoxResult.Cancel, kivéve, ha a MessageBox csak OK értéket tud visszaadni (csak ilyen gombot tartalmaz), mert akkor ez is OK-nak számít. Felsorolás elemeLeírás OKA dialógus OK gombot tartalmaz OKCancelA dialógus OK és Cancel gombokat tartalaz YesNo A dialógus Yes és No gombokat tartalmaz (a kötelező választás érdekében letiltja a piros X-et!) YesNoCancelA dialógus Yes, No és Cancel gombokat tartalmaz MessageBox.Show("Többsoros\nüzenet\nfejléccel", "Fejléc", MessageBoxButton.YesNoCancel);

5 V 1.0ÓE-NIK, MessageBox paraméterek II. Megjelenítendő ikon: A megjeleníthető ikon a MessageBoxImage felsorolás egy eleme: Felsorolás elemeIkon AsteriskKis i betű kék körben ErrorFehér X piros körben ExclamationFelkiáltójel sárga háromszögben HandFehér X piros körben InformationKis i betű kék körben None- QuestionKérdőjel körben StopFehér X piros körben WarningFelkiáltójel sárga háromszögben MessageBox.Show("Többsoros\nüzenet\nfejléccel", "Fejléc", MessageBoxButton.YesNoCancel, MessageBoxImage.Error);

6 V 1.0ÓE-NIK, 2014 Microsoft.Win32 névtér dialógusablakai OpenFileDialog: fájl megnyitásához SaveFileDialog: fájl mentéséhez A ShowDialog() visszatérési értéke: –bool? típusú (nullable bool) –true: a felhasználó elvégezte az interakciót (a dialógusablakban megadott információ felhasználható) –false: „mégsem” jellegű kilépés (a dialógusablakban megadott információ nem felhasználható) –null: az ablak még nem záródott be MINDIG ellenőrizni kell! 6 OpenFileDialog openFileDialog = new OpenFileDialog(); if (openFileDialog.ShowDialog() == true) { string kivalasztottFajl = openFileDialog.FileName; //... fájl megnyitása, kezelése... }

7 V 1.0ÓE-NIK, 2014 Feladat 7

8 V 1.0ÓE-NIK, 2014 Feladat – előző kiegészítése 8

9 V 1.0ÓE-NIK, Saját ablakok készítése Saját ablakok használata: 1..xaml +.xaml.cs fájlok létrehozása: Project -> Add -> Window... Helyezzük el rajta a vezérlőket, állítsuk be a tulajdonságokat, készítsük el a működést 2.Hozzuk létre a példányt, jelenítsük meg a hívó ablakból modálisan/nem modálisan Megjelenítés –window.Show();  megjelenít nem modálisan –window.ShowDialog();  megjelenít modálisan, bool? visszatérési értéke jelzi, hogy milyen módon zártuk be az ablakot MyWindow window = new MyWindow(); window.Show(); MyWindow window = new MyWindow(); if (window.ShowDialog() == true) { //... }

10 V 1.0ÓE-NIK, 2014 Saját ablakok készítése Ha a saját ablak bezárásának módjáról információt akarunk adni a ShowDialog() függvény visszatérési értékeként: this.DialogResult –Ez be is zárja az ablakot Button példányok kapcsolódó tulajdonságai: –IsCancel – ESC gomb lenyomására ez a gomb fog megnyomódni, és bezárja az ablakot (általában a Cancel) –IsDefault – Enter gomb lenyomására ez a gomb fog megnyomódni (általában az OK) Nem zárja be az ablakot Általában az eseménykezelőben viszont DialogResult-ot állítunk 10 private void Button_Click(object sender, RoutedEventArgs e) { this.DialogResult = true; }

11 V 1.0ÓE-NIK, Saját ablakok készítése Saját tervezésű ablakokban bekért értékeket tulajdonságokon keresztül szokás visszaadni –Minden értékhez készítsünk egy-egy tulajdonságot Főleg csak modális megjelenítés esetén! A párbeszédablakot aktivizáló ablakban előbb a visszatérési értéket vizsgáljuk meg, majd ennek megfelelően használjuk a tulajdonságokat string nev; string szuletesiHely; int eletkor; SzemelyesAdatWindow adatBekero = new SzemelyesAdatWindow(); if (adatBekero.ShowDialog() == true) { nev = adatBekero.Nev; szuletesiHely = adatBekero.SzuletesiHely; eletkor = adatBekero.Eletkor; }

12 V 1.0ÓE-NIK, 2014 Ablakok tulajdonságai, metódusai, eseményei A Window ContentControl utód –A ContentControl összes tulajdonságát és eseményét lehet használni (Width, Height, Foreground, Background… MouseDown, MouseUp, KeyDown, KeyUp, PreviewXXX… Loaded…) Főbb tulajdonságok: –Title (címsor szövege) –Topmost (felül marad) –WindowStartupLocation (hova jelenjen meg) –WindowState (állapot – maximalizált, minimalizált, normál) 12

13 V 1.0ÓE-NIK, 2014 Ablakok tulajdonságai, metódusai, eseményei Főbb metódusok: –Show() – megjelenítés nem modálisan –ShowDialog() – megjelenítés modálisan –Close() – bezárás –Activate() – előtérbe hozás és aktiválás –Hide() – láthatatlanná tétel Főbb események: –Closed – bezáródott –Closing – bezáródna A Closed előtt történik. Ablak becsukása előtt végrehajtandó eseményekhez használjuk, pl. mentés –Activated – aktiválódott –Deactivated – deaktiválódott 13

14 V 1.0ÓE-NIK, 2014 Feladat 14

15 V 1.0ÓE-NIK, 2014 Feladat 15

16 V 1.0ÓE-NIK, 2014 Továbbított események (Routed Events) Problémafelvetés: –Tudjuk, hogy a WPF ablakokban sok felhasználóifelület- elem lehet – gombok, textboxok, egyebek –Szeretnénk tudomást szerezni róla, ha a felhasználó bárhol a felhasználói felületen mozgatja az egeret! „Hagyományosan” csak egy megoldást tudunk: az összes felhasználóifelület-elem MouseMove-ját kezelni kell… –Tudjuk, hogy a ContentControl-okban több elem is lehet –Pl: Button, benne StackPanel és két Rectangle = pause gomb –Mire kattintott a felhasználó? Akár a Button „látszó” részeire, akár a StackPanelre vagy a téglalapokra kattintott, nekünk a végén Click esemény kell! Sok esetben jó lenne, ha adott eseményekről nemcsak az adott elem, hanem a tartalmazói is tudomást szereznének 16

17 V 1.0ÓE-NIK, 2014 Továbbított események (Routed Events) A WPF felhasználóifelület-elemek eseményei ún. továbbított események –Nem csak azon az elemen váltódik ki az esemény, amelyiken tényleg megtörtént –Az elem szülőiben is kiváltódik (kiváltódhat)  elképzelhető, hogy valamelyik szülő elem kezeli Az egymásba helyezett felhasználóifelület-elemek által alkotott faszerkezetet elemfának nevezzük –ContentControl, ItemsControl elemeknél: Content, Items miatt –Tartalommenedzserekben (Children) –Felhasználóifelület-elemek belső szerkezete is bonyolult lehet! Nemcsak egyféle elemfát értelmezünk: logikai fa, vizuális fa 17

18 V 1.0ÓE-NIK, 2014 Felhasználóifelület-elemek fája Az elemek logikai fája (logical tree) mutatja a felhasználói felület elemeinek kapcsolatait Az elemek vizuális fája (visual tree) az egyes elemek belső struktúráját is tartalmazza, a logikai fánál bővebb fogalom 18

19 V 1.0ÓE-NIK, 2014 Felhasználóifelület-elemek fája 19 MainWindow Border AdornerDecorator AdornerLayerContentPresenter Grid LabelButton Border ContentPresenter TextBlock Border ContentPresenter TextBlock Logikai fa –Pirossal –Document Outline- ban ezt látjuk Vizuális fa –Piros+cián –Debugolás közben megjeleníthető

20 V 1.0ÓE-NIK, 2014 Továbbított események A továbbított események az elemfán közlekednek Logikai fán: dinamikus erőforrások, adatkötéskor elemnevek keresése … Vizuális fán: elemek kirajzolása, átlátszóság, transzformációk, IsEnabled, találattesztelés Hibrid: dependency propertyk, továbbított események Továbbítási stratégiák: –Felfelé közlekedő („bubbling”) továbbított esemény: először a kiváltó felhasználóifelület-elemen, utána pedig sorra a szülőkön, a gyökérig. –Lefelé közlekedő („tunneling”) továbbított esemény: először a gyökéren, majd a kiváltó elem felé vezető szülőkön, legvégül a kiváltó elemen hívódnak meg az eseménykezelők –„Direct” továbbított esemény: csak a kiváltó elemen hívódnak meg az eseménykezelők. A dokumentációban (MSDN) minden eseménynél megtalálható, hogy milyen továbbítási stratégiát alkalmaz 20

21 V 1.0ÓE-NIK, 2014 Továbbított események A PreviewXXX-XXX eseménypárok közül: –A PreviewXXX „tunneling” stratégiát alkalmaz –Az XXX „bubbling” stratégiát alkalmaz –A Preview mindig előbb következik be PreviewMouseDown, MouseDown példa 1.PreviewMouseDown a MainWindow-n. 2.PreviewMouseDown a Griden. 3.PreviewMouseDown a Labelen. 4.MouseDown a Labelen. 5.MouseDown a Griden. 6.MouseDown a MainWindow-n. 21 MainWindow Grid LabelButton Vannak működési variációk: pl. a Grid a Labelre való kattintáskor mindig érintett, de ha rajta kattintunk, a MouseDown csak akkor váltódik ki rajta, ha látható (pl. Background nem null). Ha nem így van, akkor a Griden nem, csak a MainWindow-n váltódik ki az esemény!

22 V 1.0ÓE-NIK, 2014 Továbbított események Ha tudni kell, hogy honnan jött az esemény… –sender: az az elem, amelyik éppen kezeli az eseményt. NEM a kiváltó elem! –e.Source: az esemény kiváltója (logikai fán) –e.OriginalSource: az esemény tényleges kiváltója (vizuális fán) Gyakorlati használat: –Felhasználóifelület-elemek egymásba építése esetén a felhasználó felé egy elemnek kell tűnnie A „fő” tartalmazó kezeli az eseményeket –Események lefutásának megakadályozása Akár az adott elem, akár a tartalmazók közül valamelyik kezelheti a PreviewXXX-t, és állíthatja az e.Handled-et –Több felhasználóifelület-elem ugyanazt a tevékenységet végzi A közös tartalmazójuk kezelheti az eseményeket Pl. számológép! 22

23 V 1.0ÓE-NIK, 2014 Feladat – Egyszerűsített Android jelszómegadó A kép eredetije: enable-pattern-lock-security-on-android-devices/ 23

24 V 1.0ÓE-NIK, 2014 HF 24

25 V 1.0ÓE-NIK, 2014 HF 25


Letölteni ppt "V 1.0 Programozás III. További ablakok készítése Továbbított események."

Hasonló előadás


Google Hirdetések