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



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

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

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

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

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.

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

BME MOGI Gépészeti informatika 14.

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

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

Vizuális programozás gyakorlat

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

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

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

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

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

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

BME MOGI Gépészeti informatika 15.

BME MOGI Gépészeti informatika 7.

Webszolgáltatás és XML alapú adatbázis. 1. Az adatbázis megtervezése

BME MOGI Gépészeti informatika 18. Grafika, fájlkezelés gyakorló óra. 1. feladat Készítsen alkalmazást az = +

Objektumok és osztályok. Az objektumorientált programozás alapjai. Rajzolás tollal, festés ecsettel. A koordinátarendszer

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

Vizuális programozás gyakorlat

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

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

Entity Framework alapú adatbáziselérés 2

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

A gyakorlat során az alábbi ábrán látható négy entitáshoz kapcsolódó adatbevitelt fogjuk megoldani.

VISUAL BASIC ALAPISMERETEK

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

Johanyák Zsolt Csaba: XML Webszolgáltatás alapú osztott alkalmazás fejlesztése (Mandelbrot halmaz számítás) oktatási segédlet

A Microsoft Visual Studio 2005 fejlesztőkörnyezet

ESEMÉNY VEZÉRELT ALKALMAZÁSOK FEJLESZTÉSE I. Bevezetés. Készítette: Gregorics Tibor

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

Eseménykezelés - Lottó játék

Szoftvertechnolo gia gyakorlat

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

GenerikusOsztály<objektumtípus> objektum = new GenerikusOsztály<objektumtípus>();

BME MOGI Gépészeti informatika 6.

Programozási technológia

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

Kétdimenziós rajzolás WPF-ben

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

A Java nyelv. Dialógus ablakok. Elek Tibor

3.2. Az alkalmazások ablaka

A Paint program használata

Entity Framework alapú adatbáziselérés

* Az eszköztáron látható menüpontok közül csak a felsoroltak esetén használható a Ctrl.

ClicXoft programtálca Leírás

1.A. feladat: Programablakok

munkafüzet open eseményéhez

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

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

Swing GUI készítése NetBeans IDE segítségével

Táblázatok. Táblázatok beszúrása. Cellák kijelölése

3. Osztályok II. Programozás II

Eseményvezérelt alkalmazások

Rajz 02 gyakorló feladat


CAD-ART Kft Budapest, Fehérvári út 35.

Tartalom Képernyő részei... 2

Bánsághi Anna 2015 Bánsághi Anna 1 of 31

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

Thermo1 Graph. Felhasználói segédlet

BME MOGI Gépészeti informatika 4.

Felhasználói kézikönyv - Android kliens

Entity Framework + LINQ oktatási segédlet

BME MOGI Gépészeti informatika 13.

A Vonallánc készlet parancsai lehetővé teszik vonalláncok és sokszögek rajzolását.

Lakóház tervezés ADT 3.3-al. Segédlet

2. Beadandó feladat dokumentáció

Grafikai lehetőségek

Regresszió számítás. Tartalomjegyzék: GeoEasy V2.05+ Geodéziai Kommunikációs Program

Tervez2 Monor gyakorló leírása

9. óra operációs rendszerek. Grafikus operációs rendszer

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

BME MOGI Gépészeti informatika 1.

11.5. Ellipszis és ellipszisív

Tisztelt Felhasználó!

A Windows az összetartozó adatokat (fájlokat) mappákban (könyvtárakban) tárolja. A mappák egymásba ágyazottak.

Szabadkai Műszaki Szakfőiskola. Web programozás. dr Zlatko Čović

Prezentáció, Diagramok, rajzolt objektumok. Szervezeti diagram

SDI ALKALMAZÁS I. Workspace / ResourceView / Toolbar / IDR_MAINFRAME. Workspace / ResourceView / Menu / IDR_MAINFRAME

Az előző lecke már gyakorlati volt, ez is az lesz. További eszközökkel ismerkedünk meg, szintén gyakorlatban, ezért két feladatot is kidolgozunk!

Miután létrehoztuk, szeretnénk neki beszédesebb nevet adni. A név változtatásához a következőt kell tenni:

C#---Access adatbáziskezelési gyakorlat

A LOGO MOTION TANÍTÁSA

QGIS tanfolyam (ver.2.0)

Ablak és ablakműveletek

Windows alkalmazások készítése. A Windows rendszerben a felhasználó hozzászokott a menü, az eszköztár és a többalakos programok használatához.

Informatika terméktervezőknek

Táblázatkezelés 2. - Adatbevitel, szerkesztés, formázás ADATBEVITEL. a., Begépelés

3. Beadandó feladat dokumentáció

Programozás I. Grafika Eseménykezelés. Programozás I. 2. gyakorlat Interakció a grafikus felületen, tagfüggvények. Surányi Márton PPKE-ITK

Rajz 01 gyakorló feladat

1. Beadandó feladat dokumentáció

Java Programozás 4. Gy: Java GUI. Tipper, MVC kalkulátor

Autodesk Inventor Professional New Default Standard.ipt

Windows mappaműveletek

Átírás:

http:www.johanyak.hu Analóg óra Készítsünk egy analóg órát megjelenítő alkalmazást. A feladat egy lehetséges megoldása a következő: 1. Az alkalmazás vázának automatikus generálása Fájl menü, New, Project Project Types: Visual C# - Windows Templates: Windows Application Name: AnalogOra OK 2. Felület kialakítása A Solution Explorerben nevezzük át a formot tartalmazó forrásállományt frmanalogora.cs-re.a formot nevezzük át (Name=frmAnalógÓra). Nincs szükségünk fejlécre és keretre, ezért FormBorderStyle=None, valamint az ablak legyen mindig látható: TopMost=True. Az ablak mérete legyen 200x200-as. Ezt a konstruktorban állítjuk be: public frmanalógóra() { InitializeComponent(); Width = 200; Height = 200; frmanalógóra Class Fields 3. Időkezelés. Az óra cmsgyorsmenü : ContextMenuStrip animációt egy Timer components : IContainer komponens segítségével dx : int oldjuk meg. Ez minden dy : int tmidőzítő : Timer másodpercben egy Tick toolstripseparator1 : ToolStripSeparator eseményt fog generálni. tsmikilépés : ToolStripMenuItem Ennek feldolgozása során tsminévjegy : ToolStripMenuItem VanMozgás : bool frissítjük (újrarajzoljuk) a Methods rajzterületet. Tegyünk a formra egy Timer komponenst. Tulajdonságai: Name=tmIdőzítő és Interval=1000 (ez 1 másodperc). Az ablak konstruktorában engedélyezzük a Timert. Ennek hatására a program indulásakor rögtön aktivizálódik az időzítő, azaz működik az óra. tmidőzítő.enabled = true; Form cmsgyorsmenü_itemclicked(object sender, ToolStripItemClickedEventArgs e) : void Dispose(bool disposing) : void frmanalógóra() frmanalógóra_keydown(object sender, KeyEventArgs e) : void frmanalógóra_load(object sender, EventArgs e) : void frmanalógóra_mousedown(object sender, MouseEventArgs e) : void frmanalógóra_mousemove(object sender, MouseEventArgs e) : void frmanalógóra_mouseup(object sender, MouseEventArgs e) : void frmanalógóra_paint(object sender, PaintEventArgs e) : void InitializeComponent() : void tmidőzítő_tick(object sender, EventArgs e) : void Az időzítő minden másodpercben generál egy Tick eseményt. Készítsünk ehhez egy eseménykezelőt, amiben előírjuk a rajzterület (form) frissítését, azaz egy Paint esemény előidézését. A formra a Paint esemény feldolgozása során fogunk rajzolni. 1

http:www.johanyak.hu private void tmidőzítő_tick(object sender, EventArgs e) { this.refresh(); 4. Rajzolás (mutatók) Készítsünk az ablak Paint eseményéhez egy eseménykezelőt. Minden másodpercben keletkezik egy Paint esemény, és ennek feldolgozása során jelenítjük meg az órát. Vonalak rajzolásához minden egyes vonaltípushoz, még ha csak színben térnek is el egymástól, egy külön Pen objektumot kell definiálnunk. A kifestéshez Brush objektumot kell definiálnunk. A rajzolás egy Graphics típusú objektum segítségével lehetséges, ennek metódusai az egyes rajzoló függvények. Referenciáját az eseménykezelő metódus második paraméterének egy adattagjaként kapjuk meg. / <summary> / Megrajzolja az órát és a pontos időt / </summary> private void frmanalógóra_paint(object sender, PaintEventArgs e) { A háttér kifestéshez szükséges ecset objektum definiálása SolidBrush sbecset = new SolidBrush(Color.Gainsboro); Kifestett óra számlap megrajzolása e.graphics.fillellipse(sbecset, 1, 1, Width - 2, Height - 2); Toll definiálása a számlap keretvonalához Pen ptoll = new Pen(Color.Black); Keretvonal megrajzolása e.graphics.drawellipse(ptoll, 1, 1, Width - 2, Height - 2); Középpont pozíciójának meghatározása int cx = Width / 2; int cy = Height / 2; Jelzővonalak rajzolása 5 percenként for (int i = 0; i < 60; i = i + 5) { e.graphics.drawline(ptoll, (int)(cx + (cx - 5) * Math.Sin(i * Math.PI / 30)), (int)(cy - (cx - 5) * Math.Cos(i * Math.PI / 30)), (int)(cx + cx * Math.Sin(i * Math.PI / 30)), (int)(cy - cy * Math.Cos(i * Math.PI / 30))); A lefoglalt erőforrások felszabadítása sbecset.dispose(); ptoll.dispose(); Idő lekérdezése DateTime ido = DateTime.Now; Másodperc mutató megrajzolása int RMp = (int)(0.9 * cx); a másodpercmutató hossza Toll létrehozása a másodpercmutatóhoz Pen pmptoll = new Pen(Color.Black, 1); Vonalhúzás a középpontból e.graphics.drawline(pmptoll, cx, cy, (int)(cx + RMp * Math.Sin(ido.Second * Math.PI / 30)), (int)(cy - RMp * Math.Cos(ido.Second * Math.PI / 30))); 2

http:www.johanyak.hu Erőforrás felszabadítás pmptoll.dispose(); Perc mutató megrajzolása int RP = (int)(0.9 * cx); a percmutató hossza Toll létrehozása a percmutatóhoz Pen pptoll = new Pen(Color.Red, 3); Vonalhúzás a középpontból e.graphics.drawline(pptoll, cx, cy, (int)(cx + RP * Math.Sin(ido.Minute * Math.PI / 30)), (int)(cy - RP * Math.Cos(ido.Minute * Math.PI / 30))); Erőforrás felszabadítás pptoll.dispose(); Óra mutató megrajzolása int RO = (int)(0.6 * cx); a percmutató hossza Toll létrehozása az óramutatóhoz Pen potoll = new Pen(Color.Green, 5); Vonalhúzás a középpontból e.graphics.drawline(potoll, cx, cy, (int)(cx + RO * Math.Sin((ido.Hour + ido.minute / 60.0) * Math.PI / 6)), (int)(cy - RO * Math.Cos((ido.Hour + ido.minute / 60.0) * Math.PI / 6))); Erőforrás felszabadítás potoll.dispose(); 5. Esc billentyű lenyomására kilépés a programból Készítünk egy eseménykezelőt az ablakon történő billentyűlenyomás (KeyDown) eseményhez. / <summary> / ESC billentyű hatására kilépés a programból / </summary> private void frmanalógóra_keydown(object sender, KeyEventArgs e) { if (e.keycode == Keys.Escape) { tmidőzítő.enabled = false; Application.Exit(); 6. Legyen az óra ablaka kör alakú Állítsuk be az ablak háttérszínét pl. kékre: BackColor=Blue. Legyen a TransparencyKey=Blue, így futásidőben csak a kéktől eltérő rész marad meg az ablakból. 7. Legyen mozgatható az ablak az egér segítségével. Létrehozunk egy bool adattagot VanMozgás néven, feladata azon információ tárolása, hogy most éppen mozgatja-e a felhasználó az ablakot. Létrehozunk két int adattagot dx és dy néven, feladatuk az egérkurzornak az ablak bal felső sarkától mért vízszintes és függőleges távolságának tárolása. 3

http:www.johanyak.hu Készítünk egy eseménykezelőt az egérgomb lenyomásához (MouseDown). A bal egérgomb lenyomásakor VanMozgás-t igazra állítjuk, és tároljuk, hogy az egér hol van az ablak bal felső sarkához képest. / <summary> / A bal egérgomb lenyomásakor VanMozgas-t igazra állítjuk, és tároljuk, / hogy az egér hol van az ablak bal felső sarkához képest. / </summary> private void frmanalógóra_mousedown(object sender, MouseEventArgs e) { if (e.button == MouseButtons.Left) { VanMozgás = true; dx = e.x; dy = e.y; A bal egérgomb felengedésekor vége az ablakmozgatásnak. Készítünk egy eseménykezelőt az egérgomb felengedéséhez (MouseUp). Ebben a VanMozgás-t hamisra állítjuk. / <summary> / A bal egérgomb felengedésekor vége az ablakmozgatásnak. / A VanMozgás-t hamisra állítjuk. / </summary> private void frmanalógóra_mouseup(object sender, MouseEventArgs e) { if (e.button == System.Windows.Forms.MouseButtons.Left) { VanMozgás = false; Készítünk egy eseménykezelőt az egér mozgatás (MouseMove) eseményhez. Egér mozgatásakor ellenőrizzük, hogy a mozgatás be van-e kapcsolva. Ha igen, akkor az egér koordinátáit átszámoljuk ablak koordinátarendszerből képernyő koordinátarendszerbe. Az így kapott értékekből levonjuk az előzőekben meghatározott ablak bal felső sarok - egér kurzor távolságokat (dx és dy). A kapott eredmény adja az ablak bal felső sarkának új pozícióját. private void frmanalógóra_mousemove(object sender, MouseEventArgs e) { if (VanMozgás) { Point p = new Point(e.X, e.y); p = PointToScreen(p); 4

http:www.johanyak.hu Left = p.x - dx; Top = p.y - dy; 8. Névjegy panel készítése. Project menü, Add Windows Form... Templates: Windows Form Name: frmnevjegy.cs Text=Névjegy és Name=frmNévjegy Elhelyezünk egy címkét (Label) valamilyen felirattal (Text= ), és egy nyomógombot (Button) OK felirattal. A nyomógomb tulajdonságai: Text=&OK és DialogResult=OK Ez utóbbi azt eredményezi, hogy a gombon kattintva bezáródik a névjegyablak, és az őt eredetileg megjelenítő ShowDialog() metódus DialogResult.OK értékkel tér vissza. 9. Gyorsmenü készítése Egy ContextMenuStrip típusú komponenst helyezünk a formra (frmanalógóra), neve: Name=cmsGyorsMenü. Kijelöljük, majd a formon megjelenő menüszerkesztőben létrehozunk egy Névjegy (Name=tsmiNévjegy) és egy Kilépés (Name=tsmiKilépés) menüpontot. Köztük legyen egy elválasztó vonal. A form tulajdonságaiban beállítjuk a gyorsmenüt: ContextMenuStrip=cmsGyorsMenü 10. Eseménykezelő készítése a gyorsmenühöz. Tervezési nézetben kiválasztjuk a gyorsmenüt, majd a Properties ablakban duplán kattintunk az ItemClicked eseményen. A kiválasztott menüpont felirata alapján készítjük a feltételes elágazás szerkezetet az egyes menüpontokhoz tartozó funkcionalitás megvalósítására. private void cmsgyorsmenü_itemclicked(object sender, ToolStripItemClickedEventArgs e) { switch (e.clickeditem.text) { case "&Kilépés": Application.Exit(); break; case "&Névjegy": frmnévjegy frmnévjegy = new frmnévjegy(); frmnévjegy.showdialog(); break; 11. Beállítjuk a főablak kezdőpozícióját a 300,300-as koordinátájú pontba. Ehhez eseménykezelőt készítünk a főablak Load eseményéhez. / <summary> / Beállítjuk a főablak kezdőpozícióját a 300,300-as / koordinátájú pontba. / </summary> 5

http:www.johanyak.hu private void frmanalógóra_load(object sender, EventArgs e) { Left = 300; Top = 300; Feladat Alakítsa át úgy a programot, hogy a mutatókat ne egy vonal jelképezze, hanem a mellékelt ábrának megfelelő alakjuk legyen. 6