Vizuális, eseményvezérelt programozás I.



Hasonló dokumentumok
A Microsoft Visual Studio 2005 fejlesztőkörnyezet

Programozás 2., II. kötet Windows form alkalmazások

Windows Application. Miklós Árpád Dr. Kotsis Domokos

Access adatbázis elérése OLE DB-n keresztül

7. Előadás. Makrók alkalmazása. Salamon Júlia. Előadás I. éves mérnök hallgatók számára

Adatbázis alapú rendszerek gyakorlat Adatbázis alapú alkalmazásfejlesztés Java, C# környezetben

Programozás BMEKOKAA146. Dr. Bécsi Tamás 8. előadás

Johanyák Zsolt Csaba: Ugráló gomb oktatási segédlet Copyright 2008 Johanyák Zsolt Csaba

Vizuális programozás gyakorlat

WCF, Entity Framework, ASP.NET, WPF 1. WCF service-t (adatbázissal Entity Framework) 2. ASP.NET kliens 3. WPF kliens

Programozás BMEKOKAA146. Dr. Bécsi Tamás 10. Előadás

Vizuális és eseményvezérelt programozás , II. félév BMF NIK

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

VISUAL BASIC ALAPISMERETEK

Eseményvezérelt alkalmazások fejlesztése II 3. előadás. Windows Forms dinamikus felhasználói felület, elemi grafika

Johanyák Zsolt Csaba: Grafikus felület programozása. Copyright 2008 Johanyák Zsolt Csaba

Objektumorientált programozás C# nyelven

components : IContainer dx : int dy : int tmidőzítő : Timer toolstripseparator1 : ToolStripSeparator tsmikilépés : ToolStripMenuItem

Objektumorientált programozás C# nyelven

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

Hello World Servlet. Készítsünk egy szervletet, amellyel összeadhatunk két számot, és meghívásakor üdvözlőszöveget ír a konzolra.

Széchenyi István Egyetem

Elemi alkalmazások fejlesztése IV. Adatbázis-kezelés ActiveX vezérlıkkel - 1

libgdx alapok, első alkalmazás

Adabáziselérés ODBC-n keresztül utasításokkal C#-ban

BME MOGI Gépészeti informatika 4.

Mérési adatgyűjtés és adatfeldolgozás 2. előadás

Adatbázis-kezelés ODBC driverrel

Tartalomjegyzék 5 TARTALOMJEGYZÉK

XML Webszolgáltatás alapú osztott alkalmazás fejlesztése Johanyák Zsolt Csaba 1

Tipp A Word makrók kimerítõ tárgyalását megtalálhatjuk az O Reilly gondozásában megjelent Writing Word Macros címû könyvben.

Objektumorientált programozás C# nyelven III.

Szoftvertervezés és -fejlesztés I.

Objektum Orientált Programozás V.

Objektumorientált programozás C# nyelven

Hardver modellezés SystemC-vel és SDL grafikus könyvtárral Visual Stúdió alatt

Programozás III CSOMAGOK. Az összetartozó osztályok és interfészek egy csomagba (package) kerülnek.

Alap számológép alkalmazás

Bevezetés a Programozásba II 11. előadás. Adatszerkezetek megvalósítása. Adatszerkezetek megvalósítása Adatszerkezetek

Java VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás:

Segítség a megoldáshoz: 1. Készítse el a Window-t az ábrának és az osztálydiagramnak megfelelően.

Blonde. Szépségszalon, Szolárium, Spa, Fitness. Ügyviteli Rendszer. Funkcionális Specifikáció. Verzió 1.1

Visual Basic 2005 Express Edition A VISUAL STUDIO HASZNÁLATA NEM LEKTORÁLT VÁLTOZAT

Objektumorientált Programozás V.

Eddig még nem használt vezérlőket is megismerünk: PlaceHolder, RadioButtonList.

strings.xml res/values/strings.xml fájlban hozzuk létre a hiányzó string adatforrásainkat A jelenlegi helyett ez álljon: <resources> <string

C# develop feladatleírások

eseményvezérelt megoldások Vizuális programozás 5. előadás

Johanyák Zsolt Csaba: Képnézegető program oktatási segédlet

Eseményvezérelt alkalmazások fejlesztése II 12. előadás. Objektumrelációs adatkezelés (ADO.NET) Giachetta Roberto

RIA Rich Internet Application

Tartalomjegyzék 3 TARTALOMJEGYZÉK

Egységes és objektumközpontú adatbázis-kezelés (2. rész)

OBJEKTUM ORIENTÁLT PROGRAMOZÁS JAVA NYELVEN. vizsgatételek

C#, OOP. Osztályok tervezése C#-ban

Java Programozás 9. Gy: Java alapok. Adatkezelő 5.rész

II. év. Adatbázisok és számítógépek programozása

Webes alkalmazások fejlesztése 8. előadás. Webszolgáltatások megvalósítása (ASP.NET WebAPI)

Sintony SAK 41. Kezelési utasíitás 8AA D0-20/10/99 - UK -

Programozás alapjai II. (9. ea) C++ többszörös öröklés, cast, perzisztencia

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

Hozzunk létre két rekordot a táblában, majd véglegesítsünk (commit):

Programozás C++ -ban 2007/4

4. Példa: Másodfokú egyenlet megoldása (program2_1.vi)

Operációs rendszerek Windows Xp

Bosch Video Management System. Kezelési útmutató

Programozási technológia

Form1 Form Size 400;400 Text Mozgó kör timer1 Timer Enabled True Interval 100

Entity Framework alapú adatbáziselérés

C# feladatgy jtemény

4. Gyakorlat: Csoportházirend beállítások

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

Tesztelés és hibajavítás Microsoft Visual Studio 2005 fejlesztőkörnyezetben

Sorosítás (szerializáció) és helyreállítás. 1. Bináris sorosítás és helyreállítás Szükséges névterek Attribútumok. 1.3.

Grafikus felhasználói felületek. Abstract Window Toolkit, a java.awt és java.awt.event csomagok

Entity Framework + LINQ oktatási segédlet

BME MOGI Gépészeti informatika 7.

CONDOR. Felhasználói Leírás

Dr. Pétery Kristóf: Excel 2007 feladatok és megoldások 2.

BBS-INFO Kiadó, 2016.

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

ArcGIS 8.3 segédlet 6. Dr. Iványi Péter

BBS-INFO Kiadó, 2013.

Pál László. Sapientia EMTE, Csíkszereda, 2014/2015

Bánsághi Anna

BME MOGI Gépészeti informatika 1.

INFORMATIKAI ALAPISMERETEK

C# osztályok. Krizsán Zoltán

Szövegszerkesztés Verzió: 0.051

Számítástechnika-kidolgozott szóbeli tételek (11-15.)

Java programozási nyelv 8. rész Grafikus felhasználói felület

// keressük meg a legnagyobb faktoriális értéket, ami kisebb, // mint százmillió

Ugráló gomb oktatási segédlet Ugráló gomb

BME MOGI Gépészeti informatika 6.

Bosch Video Client. Kezelési útmutató

1. fejezet Microsoft Excel 2010 Tartománynevek... 3

Adósságrendezési eljárás - Ügyfél alkalmazás FELHASZNÁLÓI LEÍRÁS

Budapest, oldal

CorelCAD 2015 Megjelenítés

Programozás Delphiben

Átírás:

Vizuális, eseményvezérelt programozás I. Visual Studio ismétlés Grafikus felület tervezése Vezérlők alapvető tulajdonságai, metódusai, eseményei Hibakezelés V 1.0 1

Hallgatói tájékoztató A jelen bemutatóban található adatok, tudnivalók és információk a számonkérendő anyag vázlatát képezik. Ismeretük szükséges, de nem elégséges feltétele a sikeres zárthelyinek, illetve vizsgának. Sikeres zárthelyihez, illetve vizsgához a jelen bemutató tartalmán felül a kötelező irodalomként megjelölt anyag, a gyakorlatokon szóban, illetve a táblán átadott tudnivalók ismerete, valamint a gyakorlatokon megoldott példák és az otthoni feldolgozás céljából kiadott feladatok önálló megoldásának képessége is szükséges. V 1.0 ÓE-NIK, 2011 2

Projektek és megoldások Projekt ( project ) A projekt egy futtatható programhoz vagy más típusú szoftvermodulhoz tartozó, együtt kezelt szoftverelemek (többségében fájlok) összessége C# forráskódok ( source code ) [*.cs] Hivatkozások ( references ) Beállítások ( settings ) [*.settings] Konfigurációs fájlok ( configuration ) [*.config] Egyéb erőforrások ( resources ) [*.resx, *.rc, *.resources] A projekthez tartozó elemek mappák létrehozásával hierarchikus fastruktúrába rendezhetők. C# projekt kiterjesztése: *.csproj Megoldás ( Solution ) Több összefüggő projekt együttes kezelését teszi lehetővé A projektek virtuális mappák segítségével hierarchikus fastruktúrába is rendezhetők. Megoldások kiterjesztése: *.sln V 1.0 ÓE-NIK, 2011 3

Új projekt indítása Console Application konzolos alkalmazás Windows Forms Application grafikus Windows alkalmazás Windows Service háttérben futó Windows rendszerszolgáltatás Class Library osztálykönyvtár Windows Forms Control Library Windows vezérlők gyűjteménye Empty Project Ehhez a projekttípushoz kézzel kell a megfelelő elemeket hozzáadni V 1.0 ÓE-NIK, 2011 4

Grafikus felhasználói felület tervezése Solution Explorer (megoldásszerkesztő) Toolbox (eszköztár) Properties (tulajdonságpanel) V 1.0 ÓE-NIK, 2011 5

Az ablak fájljai Form1.cs Ebbe a fájlba kerül a felhasználói kód, kézzel általában csak ezt módosítjuk Form1.Designer.cs Automatikusan generált kód, amely a Designerben (az ablakszerkesztőben) összeállított ablak kinézetét generálja futásidőben Form1.resx Az ablakkal kapcsolatos erőforrásokat tároló XML formátumú fájl pl. háttérképek vagy ikonok, hosszú stringek, lokalizációs stringek kerülnek bele V 1.0 ÓE-NIK, 2011 6

Felbontott típusok A Form1 osztály felbontott osztály (partial class) Partial class: Minden részt a partial kulcsszóval kell megjelölni Előnye, hogy a típusok úgy oszthatók meg több programozó vagy automatikus kódgenerátor között, hogy fizikailag nem kell osztozniuk a forrásfájlokon Különválasztható (és ezáltal külön fejleszthető és verzionálható) az osztályok automatikusan, illetve kézzel előállított része Különválasztható az egyes osztályok kódján dolgozó fejlesztőcsapatok munkája Osztályok, struktúrák, interface-ek lehetnek ilyenek (+partial void) A felbontott típusok elemeit a C# fordító összefésüli A fordító úgy kezeli az elemeket, mintha egy fájlban, egy típusdefinícióként hoztuk volna létre őket V 1.0 ÓE-NIK, ÓE-NIK, 2011 2011 7

Designer.cs Az ablak esetében a Form1.Designer.cs-ben lévő automatikusan generált kód és a Form1.cs-ben lévő általunk megírt kód együtt alkotják a Form1 osztályt A Form1.Designer.cs az ablakszerkesztőben való megnyitáskor és ottani változtatások hatására mindig újragenerálódik partial class Form1... private void InitializeComponent() this.suspendlayout(); // // Form1 // this.autoscaledimensions = new System.Drawing.SizeF(6F, 13F); this.autoscalemode = System.Windows.Forms.AutoScaleMode.Font; this.clientsize = new System.Drawing.Size(116, 14); V 1.0 this.name = "Form1"; ÓE-NIK, 2011 8

Designer.cs Az ablak tulajdonságai az InitializeComponent() függvényben állnak be a kívánt értékre Az InitializeComponent() az ablak konstruktorából hívódik partial class Form1 private void InitializeComponent() this.suspendlayout(); // // Form1 // this.autoscaledimensions = new System.Drawing.SizeF(6F, 13F); this.autoscalemode = System.Windows.Forms.AutoScaleMode.Font; this.clientsize = new System.Drawing.Size(191, 63); this.name = "Form1"; this.text = "hello world"; this.load += new System.EventHandler(this.Form1_Load); this.resumelayout(false); V 1.0 ÓE-NIK, 2011 9

Designer.cs Az ablakra helyezett komponensek a Form1.Designer.cs-ben megjelennek mint az ablak tagváltozói Kivéve, ha GenerateMember == false (később) Tulajdonságaik szintén az InitializeComponent()-ben állnak be partial class Form1... private void InitializeComponent()... this.button1 = new System.Windows.Forms.Button(); this.suspendlayout(); // // button1 // this.button1.location = new System.Drawing.Point(12, 18); this.button1.name = "button1"; this.button1.size = new System.Drawing.Size(75, 23); this.button1.tabindex = 0; this.button1.text = "button1"; this.button1.usevisualstylebackcolor = true;...... private System.Windows.Forms.Button button1; V 1.0 ÓE-NIK, 2011 10

Egyszerű példaalkalmazás készítése namespace WindowsFormsApplication2 public partial class Form1 : Form public Form1() InitializeComponent(); Text = "Hello World!"; button1.width = 200; textbox1.text = "Hello World!"; Bármilyen kódnak, amiben hozzányúlunk a komponensekhez, az InitializeComponent() után kell lefutnia Különben az InitializeComponent()-beli beállítások felülírják a mieinket A fenti megoldás OOP alapelveknek megfelel, de a vizuális alkalmazásfejlesztés követelményeinek nem. Hasonló célokra a konstruktor helyett többnyire eseménykezelőket használunk (később) V 1.0 ÓE-NIK, 2011 11

Rendszergombok Kliensterület (itt helyezhetünk el egyéb komponenseket) Fejléc és szövege Rendszermenü V 1.0 ÓE-NIK, 2011 12

Beépített komponensek Pointer: nem komponens, ezzel váltunk vissza szerkesztő módba Közönséges vezérlők (Common Controls)* Nyomógomb Jelölőnégyzet Listák: ListBox: egyszerű lista ComboBox: legördülő lista CheckedListBox: egyszerű lista kipipálható elemekkel Címke (szöveg az ablakon) Szövegdobozok: TextBox: sima szövegbeviteli mező MaskedTextBox: adott formátumú bevitelt biztosít RichTextBox: formázható (szín, betűtípus stb.) szövegbevitelt biztosít Numerikus beviteli mező Kép Rádiógomb Fanézet Webböngésző** * A beépített komponensek tárgyalása nem teljes körű, a legfontosabb vezérlők bemutatására szorítkozunk. ** A WebBrowser komponens gyakorlatilag a telepített Internet Explorer egy példánya, ennek összes előnyével és hátrányával. V 1.0 ÓE-NIK, 2011 13

Beépített komponensek Csoportosító vezérlők (Containers) Az ablak szerkezetének kialakításában játszanak szerepet, más vezérlők csoportosítására szolgálnak Csoport* Panel* Automatikus elrendezők: FlowLayoutPanel: egymás után rendezi el a belehelyezett vezérlőket TableLayoutPanel: táblázatszerű elrendezést biztosít Füles vezérlő Méretezhető kétfelé választó vezérlő Menük és eszközkészletek (Menus & Toolbars) Kontextusmenü Menü Státuszsor * A csoport és a panel lényegében ugyanazt a funkciót valósítja meg (egyszerű grafikus csoportosítás). Fő különbségek: a csoportnak van címe, a panel pedig tud scrollozni, ha a benne elhelyezett tartalom nagyobb, mint a panel mérete. V 1.0 ÓE-NIK, 2011 14

Beépített komponensek Adatkezelő komponensek (Data) Adatrács és más komponensek (főként adatbázis-kezelésben használatosak) Komponensek (Components) Az ablak nem vizuális elemei Időzítő, fájlrendszer-figyelő, háttérszál-kezelő, súgókezelő stb. Háttérszál-kezelő Fájlrendszer-figyelő Súgókezelő Időzítő V 1.0 ÓE-NIK, 2011 15

Beépített komponensek Nyomtatással kapcsolatos komponensek (Printing) Oldalbeállító ablak Nyomtatási kép Nyomtatható dokumentum Nyomtatási párbeszédablak Párbeszédablakok (Dialogs) Szintén nem jelennek meg az ablakon, de procedurálisan megjeleníthetők Mappatallózó ablak Fájl betöltése... ablak Fájl mentése... ablak Színválasztó ablak Betűtípus ablak V 1.0 ÓE-NIK, 2011 16

Tulajdonságok és események A szerkesztőben kijelölt komponens tulajdonságai a Properties ablakban állíthatók A módosított tulajdonságokat félkövér betű jelöli A Reset helyi menüpont alaphelyzetbe állítja az adott tulajdonságot Ugyanitt a komponens egyes eseményeihez ún. eseménykezelőket rendelhetünk Kettős kattintással új eseménykezelő hozható létre Eseménykezelő törlése: Reset helyi menüponttal, vagy az eseménykezelő nevének kitörlése+enter Eseménykezelőt hozzárendelni a komponensen való kettős kattintással is lehet, ez az alapértelmezett eseményhez rendel eseménykezelőt V 1.0 ÓE-NIK, 2011 17

Eseménykezelők Az eseménykezelő hozzárendelése szintén az ablak InitializeComponent() függvényébe kerül (bővebben PPT-n) this.button1.click += new System.EventHandler(this.button1_Click); Az eseménykezelő függvény felépítése private void button1_click(object sender, EventArgs e) Nincs visszatérési érték sender paraméter: Referencia az objektumra, amely az eseményt kiváltotta Típusa: object, tehát bármely osztály egy példánya átadható benne (bővebben PPT-n!) e paraméter: Az eseménnyel kapcsolatos információkat tartalmazza (Pl. MouseMove eseménynél tartalmazza az egér aktuális koordinátáit, az éppen lenyomva tartott gombokat stb.) Típusa: EventArgs és utódai (bővebben PPT-n!) V 1.0 ÓE-NIK, 2011 18

Egyszerű példaalkalmazás készítése II. public partial class Form1 : Form public Form1() InitializeComponent(); private void buttonszamol_click(object sender, EventArgs e) float jovedelem = float.parse(textboxjovedelem.text); float ado = float.parse(textboxadoszazalek.text) / 100f; float adoeloleg = float.parse(textboxadoeloleg.text); float befizetendo = jovedelem * ado; if (befizetendo < adoeloleg) labelhelyzet.text = "Túlfizetés!"; else if (befizetendo > adoeloleg) labelhelyzet.text = "Alulfizetés!"; else labelhelyzet.text = "Pontos befizetés!"; V 1.0 ÓE-NIK, 2011 19

Vezérlők alapvető tulajdonságai azonosítás Name A komponens egyedi megnevezése, amellyel hivatkozunk rá. Erre a tulajdonságra az általános névadási szabályok vonatkoznak. Parent A komponenst vizuálisan tartalmazó csoportosító vezérlő ( szülő ). Meghatározza a komponens koordinátarendszerének origóját. Tag Tetszőleges objektum tárolható ebben a tulajdonságban (hivatkozás formájában). A tulajdonság típusa object, tehát bármilyen osztály egy példányára hivatkozhat. (Bővebben PPT-n!) Segítségével kiegészítő információk adhatók a komponenshez, külső vagy belső objektumok kapcsolhatók hozzá. V 1.0 ÓE-NIK, 2011 20

Vezérlők alapvető tulajdonságai megjelenés BackColor, ForeColor A komponens előtér- és háttérszínét határozzák meg. Egyéni színek ( Custom ), a weben gyakran használt színek ( Web ), illetve rendszerszínkódok ( System ) közül választhatunk. BackgroundImage, BackgroundImageLayout A komponens háttérképe, amely a BackgroundImageLayout tulajdonság értéke alapján lehet a bal felső sarokba igazított ( None ), ismétlődő ( Tile ), középre igazított ( Center ), méretre igazított ( Stretch ) vagy egyéni méretezésű ( Zoom ). Cursor Az itt beállított egérmutató jelenik meg, amikor az egeret a komponens fölé húzzuk. V 1.0 ÓE-NIK, 2011 21

Vezérlők alapvető tulajdonságai megjelenés Font A komponens által megjelenített szöveg(ek) betűstílusát határozza meg. Ha egyáltalán nem módosítjuk, akkor a komponens átveszi a szülője (vagy szülő hiányában tartalmazója) megfelelő tulajdonságának értékét. * Image, ImageAlign A komponensen megjelenített kép, amelyet az ImageAlign tulajdonság segítségével vízszintesen, illetve függőlegesen is igazíthatunk. Text, TextAlign A komponens szövege, amelyet a TextAlign tulajdonság segítségével vízszintesen, illetve függőlegesen is igazíthatunk. * Az ilyen típusú tulajdonságokat a.net keretrendszerben a környezettől átvett tulajdonság ( ambient property ) kifejezés jelöli. V 1.0 ÓE-NIK, 2011 22

Vezérlők alapvető tulajdonságai viselkedés Enabled A komponens működtetésének engedélyezésére, illetve letiltására szolgál. TabIndex, TabStop Ha a TabStop tulajdonság értéke igaz ( true ), a komponens részt vesz a Tab billentyűvel végrehajtható bejárásban, méghozzá a TabIndex tulajdonság által megadott pozícióban. Visible A komponens láthatóságának engedélyezésére, illetve letiltására szolgál. V 1.0 ÓE-NIK, 2011 23

Vezérlők alapvető tulajdonságai elhelyezkedés Anchor Segítségével összeköthetjük a komponenst a szülő bal/jobb/felső/alsó szegélyével. Összekötés után a komponens és a szülő megfelelő széle mindig együtt mozog, tehát távolságuk átméretezéskor sem változik. AutoSize, AutoSizeMode Ha az AutoSize tulajdonság értéke true, a komponens automatikusan a saját tartalma által megkívánt méretre nagyítja (AutoSizeMode == GrowOnly) vagy nagyítja és kicsinyíti (AutoSizeMode == GrowAndShrink) saját magát. Dock Segítségével közvetlenül hozzákapcsolhatjuk a komponenst a szülő bal/jobb/felső/alsó szegélyéhez, vagy beállíthatjuk, hogy a komponens mindig teljesen töltse ki a szülő területét (Dock == Fill). V 1.0 ÓE-NIK, 2011 24

Vezérlők alapvető tulajdonságai (6) Elhelyezkedés Location, Top, Left, Right, Bottom A komponens képpontokban számított pozícióját adja meg a szülőhöz viszonyított koordinátarendszerben. A Left, Top tulajdonságokkal lekérdezhetjük vagy állíthatjuk a függőleges és vízszintes pozíciót. A Right, Bottom tulajdonságokkal lekérdezhetjük a komponens aljának és jobb oldalának elhelyezedését (állítani nem lehet) MaximumSize, MinimumSize A komponens képpontokban számított maximális, illetve minimális méreteit (szélességét és magasságát) adja meg. Size A komponens képpontokban számított méreteit (szélességét és magasságát) adja meg. V 1.0 ÓE-NIK, 2011 25

Vezérlők alapvető tulajdonságai egyéb GenerateMember Ha értéke true, a komponenshez a Visual Studio külön tagváltozót rendel a tartalmazó osztályban. Ellenkező esetben a komponensre az InitializeComponent()-en kívüli kódból nem lehet majd hivatkozni. Modifiers A komponens láthatósági szintje. UseMnemonic Ha értéke true, a komponenshez gyorsbillentyűt rendelhetünk (a Text tulajdonságánál megadott szövegben az & karakter után álló betű). Az & karakter ilyenkor nem jelenik meg a komponens szövegében. UseWaitCursor Segítségével várakozó kurzorra állíthatjuk át a komponens egérmutatóját. V 1.0 ÓE-NIK, 2011

Vezérlők alapvető eseményei Click A komponensre való kattintáskor hívódnak a hozzá rendelt eseménykezelők. * Enter, Leave Akkor hívódnak a hozzá rendelt eseménykezelők, amikor a komponens megkapja (Enter), illetve elveszíti (Leave) a fókuszt. KeyDown, KeyPress, KeyUp A komponens fókuszált ** állapotában valamely billentyű lenyomásakor a KeyDown, felengedésekor a KeyUp, illetve a normál *** billentyűk megnyomásakor a KeyPress eseménykezelők hívódnak meg. Sorrend: KeyDown, KeyPress, KeyUp * A Visual Studio grafikus felületén nem tudunk egy eseményhez több eseménykezelőt rendelni (saját forráskódban viszont igen). ** Egy komponens akkor van fókuszált állapotban, ha az operációs rendszer hozzá irányítja a bemeneti eszközök eseményeit (egérmozgatás, billentyűlenyomás stb.) lásd a Focus() metódus leírását. *** Normál billentyűk: az ABC betűi, a számok és az írásjelek. V 1.0 ÓE-NIK, 2011 27

Vezérlők alapvető eseményei (2) MouseDown, MouseMove, MouseUp Az egér valamelyik gombjának a komponens felett történő megnyomásakor a MouseDown, felengedésekor a MouseUp eseménykezelők hívódnak meg. Az egérnek a komponens felett történő mozgatásakor a MouseMove eseménykezelők hívódnak meg. (Folyamatosan, sokszor a mozgás során.) MouseEnter, MouseLeave Akkor hívódnak az eseménykezelői, amikor az egér a komponens fölé ér (MouseEnter), illetve elhagyja a komponens területét (MouseLeave). Move, Resize Akkor hívódnak az eseménykezelői, ha a komponens pozíciója (Move) vagy mérete (Resize) megváltozott. V 1.0 ÓE-NIK, 2011 28

Vezérlők alapvető eseményei (3) Changed Az ezen eseményekhez tartozó eseménykezelők akkor hívódnak meg, ha a komponens megfelelő tulajdonságának értéke megváltozott. Például az AutoSizeChanged eseménykezelői az AutoSize tulajdonság, a BackColorChanged eseménykezelői a BackColor tulajdonság megváltozásakor hívódnak meg, és így tovább. Néhány gyakran használt Changed eseménykezelő: AutoSizeChanged EnabledChanged FontChanged SizeChanged VisibleChanged V 1.0 ÓE-NIK, 2011 29

Vezérlők alapvető metódusai (1) Hide(), Show() Komponens elrejtése, felfedése Invalidate(), Update(), Refresh() Közvetve vagy közvetlenül a komponens újrarajzolását váltják ki: Invalidate() a komponens területét részben vagy teljesen újrarajzolandónak nyilvánítja, de rajzolást közvetlenül nem végez (az újrarajzolásra tehát a legközelebbi rajzolási ciklusban kerül sor) Update() a komponens korábban már újrarajzolandónak nyilvánított területeinek azonnali újrarajzolását váltja ki Refresh() a komponens teljes területét újrarajzolandónak nyilvánítja és azonnal el is végzi az újrarajzolást BringToFront(), SendToBack() A komponenst az előtérbe (a többi komponens elé), illetve a háttérbe (a többi komponens mögé) helyezi. V 1.0 ÓE-NIK, 2011 30

Vezérlők alapvető metódusai (2) Focus() A komponensre állítja a bemeneti fókuszt Select() Kiválasztja a komponenst (nem minden komponens kiválasztható). A tartalmazó komponens ActiveControl tulajdonságát is beállítja. Scale() Adott tényezővel megszorozza a komponens (valamint az általa tartalmazott alkomponensek) minden méretét. Kicsinyítésre és nagyításra is alkalmas. SetBounds() A komponens helyét és méreteit állítja be. Előnye, hogy egyszerre állítja be az új hely koordinátáit és az új méreteket, így a komponens csak egyszer rajzolja újra saját magát. V 1.0 ÓE-NIK, 2011 31

Kivételkezelés Felhasználói programban szükséges a bemenetek ellenőrzése és a felmerülő hibalehetőségek kiküszöbölése Ennek általános eszköze az ún. kivételkezelés Bővebben PPT-n! A program normális működésétől eltérő, váratlan, kivételes eseteket kezeljük vele V 1.0 ÓE-NIK, 2011 32

Kivételkezelés try... catch... finally... A try blokkba helyezzük azt a részt, amely problémát okozhat A catch blokkba kerül a vezérlés, ha a try blokkban lévő kódban hiba történt A finally blokkban lévő rész mindenképp lefut A finally elhagyható Honnan tudjuk egy kódrészről, hogy problémát okozhat? Józan ész Felhasznált függvények ellenőrzése V 1.0 ÓE-NIK, 2011 33

Kivételkezelés try float jovedelem = float.parse(textboxjovedelem.text); catch (FormatException) labelhiba.text = "Hibás formátum!"; catch (OverflowException) labelhiba.text = "Túl nagy szám! "; catch (Exception ex) labelhiba.text = ex.message; Catch blokkból több is lehet, ezek közül csak egy fut le Megadjuk a hiba típusát, amit az adott catch blokk kezeljen Az adott típusú vagy utód típusú kivételeket kapja el az adott blokk (PPT!) Megadhatunk a típus mellett egy nevet is, ekkor a blokkon belül felhaszálhatjuk a kivétellel kapcsolatos információkat tartalmazó kivételobjektumot is V 1.0 ÓE-NIK, 2011 34

Hibakezelés más eszközei Felhasználói bemenetek ellenőrzésére nagyon gyakran használjuk a TryParse()-t Parse() függvény hibakezeléssel ellátott változata double jovedelem; if (double.tryparse(textboxjovedelem.text, out jovedelem)... else labelhiba.text = "Hibás bevitel!"; Out paraméterként várja a változót, amibe az eredmény kerül A visszatérési értékét kell ellenőrizni: Ha igazat ad vissza, sikerült a konverzió, ekkor felhasználhatjuk az out paraméterként beadott értéket Ha hamisat ad vissza, sikertelen volt a konverzió Nem történik kivételdobás, a hiba okát nem tudjuk meg A beviteli hibák megfelelő vezérlőválasztással és a bemenet szabályozásával részben kivédhetők V 1.0 ÓE-NIK, 2011 35