Grafikus C# – Windows Forms tanfolyam › 0.2 lecke

Windows Forms · 0.2 lecke

Konzolprogram és eseményvezérelt alkalmazás – mi a különbség?

Egy konzolprogram többnyire lépésről lépésre halad. Egy grafikus alkalmazás viszont gyakran vár: kattintásra, billentyűleütésre vagy más eseményre. Ebben a leckében azt értjük meg, mi irányítja a program futását a két esetben.

  • kb. 25 perc
  • kezdő szint
  • fogalmak + ismert konzolkód
Diáklány C# programot készít laptopon

A lecke végére

  • el tudod magyarázni, hogyan halad egy tipikus kezdő konzolprogram;
  • érted, mit jelent az, hogy egy grafikus alkalmazás eseményvezérelt;
  • felismered a különbséget a rögzített lépéssor és az eseményre adott reakció között;
  • tudod, mi az esemény, és felismered, hogy a program az eseményre valamilyen reakciót adhat;
  • hétköznapi példák alapján eldöntöd, melyik működés melyikhez hasonlít.

Mielőtt elkezded

Erre a leckére akkor állsz készen, ha már írtál egyszerű konzolprogramot (Console.ReadLine(), Console.WriteLine()), és olvastad az előző leckét a grafikus felületekről.

0.1 Mi a GUI? →

Adatbekérés C#-ban →

Hogyan működik egy konzolprogram?

Egy egyszerű konzolprogramnál általában jól követhető a sorrend. A program elindul, végrehajt egy utasítást, majd a következőt. Ha adatot kér tőlünk, megvárja a választ, aztán folytatja a következő lépéssel.

Program indul→Kérdez→Felhasználó válaszol→Feldolgoz→Eredményt ír ki→Program véget ér

A lényeg

A tipikus kezdő konzolprogramban a futás sorrendjét főként a programsorok és a vezérlési szerkezetek (elágazás, ciklus) adják meg. A felhasználó ott avatkozik közbe, ahol a program adatot kér tőle.

Hétköznapi párhuzam a recept: a lépések sorrendje többnyire előre adott (előkészítünk, összekeverünk, megsütünk), és nem a sütemény dönti el, melyik lépés következzen.

Mi változik egy eseményvezérelt alkalmazásban?

Egy grafikus program megnyitása után gyakran nem tudjuk előre, mit tesz a felhasználó következőként. Lehet, hogy egy gombra kattint, beír valamit, kiválaszt egy menüpontot, vagy bezárja az ablakot.

Ilyenkor a program készen áll, és figyeli azokat az eseményeket, amelyekre reagálnia kell.

Alkalmazás elindul→Vár egy eseményre→Esemény történik→Program reagál→Újra vár

Nem fagyott le!

Az eseményvezérelt program nem azért „áll”, mert lefagyott. A háttérben készen áll arra, hogy a felhasználó vagy a rendszer eseményeire válaszoljon.

Hétköznapi párhuzam a lift: nem egyetlen előre rögzített útvonalat hajt végre egész nap. Várja, hogy valaki megnyomjon egy gombot, majd az adott eseményre reagál. Attól függően, melyik gombot nyomják meg és milyen sorrendben érkeznek a kérések, más-más emeleteken állhat meg.

A két működés egymás mellett

SzempontKonzolprogramEseményvezérelt alkalmazás
Mi dönti el, mi következik?Elsősorban a program előre megírt lépései.Az események és az ezekhez rendelt reakciók.
Felhasználói beavatkozásA program által kért pontokon.Gyakran többféle művelet közül választhat.
Tipikus felületSzöveges konzolablak.Ablakok, gombok, mezők, menük.
Mi történik két művelet között?A program halad a következő utasítás felé, vagy adatbevitelre vár.Az alkalmazás várja a következő eseményt.
PéldaKérdez–válaszol típusú számolóprogram.Kalkulátor vagy zenelejátszó grafikus felülettel.

Mit jelent pontosan az „esemény”?

Az esemény olyan történés, amelyre a program reagálhat. Most még csak azt figyeljük meg, milyen események fordulhatnak elő egy grafikus alkalmazásban, és milyen reakciót válthatnak ki. Nézzünk néhány gyakori példát:

🖱️ KattintásA felhasználó megnyom egy gombot.
⌨️ BillentyűleütésA felhasználó lenyom egy billentyűt.
✍️ Szöveg megváltozikA felhasználó ír vagy töröl egy beviteli mezőben.
❌ Ablak bezárásaA felhasználó bezárja a programablakot.

Most csak ennyit jegyezz meg

Esemény történik, a program pedig erre valamilyen választ ad. Azt, hogy ezt C#-ban hogyan kapcsoljuk össze, az első Windows Forms projektben és a 2.1 leckében fogjuk megtanulni.

Ugyanaz a köszöntő, kétféle programban

Nézzük meg ugyanazt a feladatot kétféleképpen. A konzolos változatot már ismerheted a C# alapokból. Az ablakos változatnál most még nem írunk új C#-kódot: csak azt figyeld meg, mikor történik a program reakciója.

KonzolprogramC#
Console.Write("Mi a neved? ");
string nev = Console.ReadLine();
Console.WriteLine($"Szia, {nev}!");
Ablakos változat – működési vázlatmég kód nélkül
Köszöntés gomb megnyomása
↓
A program felhasználja a beírt nevet
↓
Megjelenik a köszöntés
Konzolos változatA három sor egymás után fut le, amint a program elindul. A ReadLine() megáll, és megvárja a felhasználót.
Ablakos változatA köszöntéshez tartozó reakció akkor történik meg, amikor a felhasználó a Köszöntés gombra kattint.

Jósolj!

Az ablakos programban beírod, hogy Anna, és megnyomod a gombot. Utána átírod a nevet Bencére, de nem nyomod meg újra a gombot. Mit látsz a feliraton?

Jóslat ellenőrzése

Továbbra is azt, hogy Szia, Anna!, mert a kód csak a gombnyomáskor fut le. A felirat addig nem változik, amíg újra nem kattintasz a gombra. A konzolos programban ilyen kérdés fel sem merül, hiszen a sorok egyszer, sorban futnak le.

Egy élethelyzet kétféle programként

Képzelj el egy egyszerű jegyár-kalkulátort. A példában az alapjegy ára 2000 Ft, és 14 éves kor alatt 50% kedvezmény jár. A program az életkor alapján eldönti, jár-e kedvezmény, majd kiszámolja a fizetendő jegyárat.

Konzolos változat
  1. A program megkérdezi az életkort.
  2. A felhasználó beírja.
  3. A program eldönti, jár-e az 50%-os kedvezmény.
  4. Kiszámolja a fizetendő jegyárat.
  5. Kiírja az eredményt.
  6. A program befejeződik.
Grafikus változat
  1. Megjelenik az ablak.
  2. A felhasználó beírja az életkort.
  3. Megnyomja a Számolás gombot.
  4. A program eldönti, jár-e kedvezmény, és kiszámolja a fizetendő jegyárat.
  5. Megjelenik az eredmény.
  6. Az ablak nyitva marad, ezért újabb életkort is meg lehet adni.

Röviden így fogalmazhatsz

A tipikus konzolprogram futási sorrendjét főként az egymás után végrehajtott utasítások adják. Az eseményvezérelt alkalmazásban a program különböző eseményekre, például kattintásra vagy billentyűleütésre reagál, ezért a felhasználói műveletek is befolyásolják, mikor melyik programrész fut le.

Gyakorlat: ellenőrizd, hogy összeállt-e a kép!

Először válaszolj önállóan, utána nyisd le a megoldást.

1. Melyik működéshez hasonlít?

Egy program elindul, megkérdezi a felhasználó nevét, megvárja a választ, kiír egy köszöntést, majd bezárul. Inkább konzolprogramos vagy eseményvezérelt működésre hasonlít?

Megoldás és magyarázat

Inkább a tipikus konzolprogram működésére. A lépések sorrendje előre meghatározott: kérdés, válasz, eredmény, befejezés.

2. Mi történik, ha a felhasználó még nem kattint?

Egy grafikus kalkulátor már megjelent a képernyőn, de a felhasználó még semmilyen gombot nem nyomott meg. Mit vár a program?

Megoldás és magyarázat

A program eseményre vár. Például egy gomb megnyomása, adatbevitel vagy az ablak bezárása indíthat el valamilyen reakciót.

3. Tedd helyes sorrendbe!

Egy eseményvezérelt alkalmazásnál rendezd sorrendbe:A) a program reagálB) az alkalmazás várC) esemény történikD) az alkalmazás ismét vár

Megoldás és magyarázat

A helyes sorrend: B → C → A → D. A program vár, esemény történik, erre reagál, majd újra készen áll a következő eseményre.

4. Élethelyzetből programlogika

Egy zenelejátszóban a felhasználó megnyomhatja a Lejátszás, a Szünet vagy a Hangerő + gombot. Miért illik erre jobban az eseményvezérelt működés, mint egyetlen előre rögzített lépéssor?

Lehetséges megoldás

Mert nem tudjuk előre, melyik gombot és milyen sorrendben használja a felhasználó. Minden gombnyomás egy esemény, amelyhez külön reakció tartozhat.

Tévhitek: te vagy a hibadetektív

Mi a hiba a gondolatmenetben?

Az alábbi három mondatot gyakran gondolják a kezdők. Mindegyik tévedés. Keresd meg, miért az.

1. „A kód a Form megnyitásakor elejétől végéig lefut.”

Miért tévedés?

Az ablakos program egyes reakciói csak akkor történnek meg, amikor a hozzájuk tartozó esemény bekövetkezik. A köszöntés például addig nem jelenik meg, amíg a felhasználó nem kattint a gombra.

2. „A program lefagyott, mert csak áll az ablak.”

Miért tévedés?

Az ablakos program normális állapota a várakozás: a következő eseményre vár. A lefagyás más: akkor van, ha a program egy hosszú vagy végtelen művelet közben nem reagál semmire. Ezt később, a 11. fejezetben tárgyaljuk.

3. „Az ablakos programban is Console.ReadLine() kell az adatbekéréshez.”

Miért tévedés?

Egy szokásos Windows Forms alkalmazásban a felhasználói adatbevitel nem a Console.ReadLine() segítségével történik. A felhasználó például egy beviteli mezőbe (TextBox) ír, a program pedig szükség esetén felhasználja a mező aktuális tartalmát.

Gyakorlótár: 6 további feladat

Oldd meg először önállóan a feladatokat, majd nyisd le a megoldást, és ellenőrizd a válaszodat.

Gyakorlás

1. Konzolos vagy eseményvezérelt?

Melyik jellemző melyik programtípusra igaz?a) A program az előre megírt vezérlés szerint hajtja végre az utasításokat, és adatbekérésnél vár a felhasználóra.b) A program az ablak megjelenése után várakozik a felhasználóra.c) A kód egy része csak egy gomb megnyomásakor fut le.d) A kérdéseket a program határozza meg, és a felhasználó azokra válaszol.

Megoldás megnyitása

a) konzolos programb) eseményvezérelt programc) eseményvezérelt programd) konzolos program

A konzolos programnál a program vezeti a menetet, és a bevitelnél például a Console.ReadLine() vár a felhasználóra. Az eseményvezérelt programban a felhasználó műveletei, például a kattintás vagy a gépelés, válthatnak ki reakciót.

2. Mi az esemény?

Az alábbi történések közül melyek számítanak eseménynek egy ablakos programban?1. Kattintás a gombra2. A TextBox szövegének megváltozása3. Az ablak bezárása4. A változó értékének kiszámolása5. Egy billentyű lenyomása

Megoldás megnyitása

1. esemény2. esemény3. esemény4. nem esemény5. esemény

Az 1., 2., 3. és 5. pont olyan történés, amelyre a program reagálhat. A változó értékének kiszámolása a program saját művelete, ezért itt nem esemény.

3. Írd le a két program menetét

Egy köszöntő program mindkét változatát írd le lépésekben: (1) konzolos változat, (2) ablakos változat (név beírása, köszöntés).

Megoldás megnyitása
Konzolos:
  1. Kiírja: Mi a neved?
  2. Megáll, és vár a beírásra (ReadLine).
  3. Kiírja: Szia, Anna!
  4. Véget ér.
Ablakos:
  1. Megjelenik az ablak.
  2. A program vár.
  3. A felhasználó beírja a nevét.
  4. A felhasználó megnyomja a gombot, ekkor a program végrehajtja a köszöntéshez tartozó műveletet.
  5. Megjelenik a köszöntés.
  6. Az ablak tovább vár, amíg be nem zárják.

4. Mi történik, ha nem kattint senki?

Egy ablakos programban a köszöntés a gomb megnyomásához kapcsolódik. A felhasználó elindítja a programot, beírja a nevét, de nem nyomja meg a gombot. Megjelenik a köszöntés? Mi történik a programmal?

Megoldás megnyitása

A köszöntés nem jelenik meg, mert a felhasználó még nem nyomta meg a gombot. A program nem áll le és nem fagy le: az ablak nyitva marad, és vár a következő eseményre. Ez az eseményvezérelt működés lényege.

Extra feladat – ha már magabiztos vagy

5. Hasonlítsd össze táblázatban

Készíts táblázatot, amely három szempont szerint hasonlítja össze a konzolos és az ablakos programot: mi határozza meg a következő lépést, mikor történik egy művelet, és milyen a felület.

Megoldás megnyitása
SzempontKonzolos programEseményvezérelt (ablakos) program
Mi határozza meg a következő lépést?A program utasításai és vezérlési szerkezetei; adatbekérésnél a program a felhasználó válaszára vár.Az események és a hozzájuk kapcsolódó reakciók; az események sorrendje változhat.
Mikor történik egy művelet?A program vezérlési menete szerint, egyes pontokon adatbevitelre várva.Egyes műveletek események hatására, akár többször is megtörténhetnek.
Milyen a felület?Szöveges.Grafikus: ablak, gomb, beviteli mező.

6. Tervezd át a számológépet

Egy konzolos program két számot kér be, és kiírja az összegüket. Tervezd meg az ablakos változat felületét! Milyen elemekre lenne szükség, és mit kellene tennie a felhasználónak a számolás elindításához?

Megoldás megnyitása

Lehetséges megoldás: egy Form, két TextBox a számok beírásához, két felirat a mezők megnevezéséhez, egy Összeadás feliratú Button és egy Label az eredmény megjelenítéséhez. A felhasználó beírja a két számot, majd megnyomja az Összeadás gombot. Ezután jelenik meg az eredmény.

Gyors önellenőrzés

Próbáld meg a választ fejben megadni, és csak utána nyisd le.

1. Mi irányítja egy tipikus konzolprogram lépéseinek sorrendjét?

Főként az egymás után megírt utasítások és a vezérlési szerkezetek (elágazás, ciklus).

2. Mit jelent az, hogy egy alkalmazás eseményvezérelt?

Azt, hogy a program eseményekre, például kattintásra vagy billentyűleütésre vár és reagál, és az események sorrendje határozza meg, mikor melyik programrész fut.

3. Mondj három példát eseményre!

Például kattintás, billentyűleütés, a szöveg megváltozása, az ablak bezárása.

4. Miért maradhat nyitva egy grafikus alkalmazás egy művelet végrehajtása után?

Mert a program újra a következő eseményre vár, a felhasználó pedig bármikor újabb műveletet indíthat.

Mit tudsz már?

  • Elmagyarázod, hogyan halad egy konzolprogram.
  • Érted, mit jelent az eseményvezérelt működés.
  • Tudod, mi az esemény, és felismered, hogy a program eseményekre reagálhat.
  • Tudod, hogy egyes műveletek csak a hozzájuk kapcsolódó esemény bekövetkezésekor történnek meg.
  • Nem tévesztesz össze várakozást és lefagyást.

Következő lecke: a Visual Studio előkészítése

Ha a konzolos és az eseményvezérelt működés különbségét már saját szavaiddal el tudod magyarázni, jöhet a fejlesztőkörnyezet: telepítjük a Visual Studiót a Windows Forms fejlesztéséhez.