Grafikus C# – Windows Forms tanfolyam › 1.2 lecke Windows Forms · 1.2 lecke · önálló gyakorlás A konzolos programban a TextBox, Button, Label, MessageBox – név bekérése
Console.ReadLine() kérte be az adatot. Az ablakos programban erre a beviteli mező, a TextBox való: a felhasználó beleír, a gomb Click eseménye pedig felolvassa a tartalmát, és egy felugró ablakban megjeleníti.
A lecke végére
- a
TextBoxtartalmát aTexttulajdonsággal kiolvasod; - a
MessageBox.Show()metódussal felugró ablakot nyitsz, címmel és ikonnal; - szöveginterpolációval beilleszted a bevitt adatot az üzenetbe;
- kezeled az üres és a szóközökből álló bevitelt;
- törlöd a mezőt, és visszaadod a kurzort a
Clear()és aFocus()segítségével; - érted, miért nem használható a
Console.ReadLine()ablakos programban.
Mielőtt elkezded
Ehhez a leckéhez kell az 1.1 lecke: gomb, felirat és az első Click eseménykezelő. A szöveginterpolációt ($"...") a C# alapok adatbekérés leckéjében ismerted meg.
A felület: három vezérlő
Készíts új Windows Forms projektet (vagy másold le az előzőt), és tegyél az ablakra három vezérlőt:
Label, a Text: Írd be a neved!TextBox: ide ír a felhasználó.Button, a Text: Köszöntéslbl = Label, txt = TextBox, btn = Button (1.1 lecke).Mit tegyél ide: a tervezőnézet a három vezérlővel: felül a „Írd be a neved!” felirat, alatta a beviteli mező, majd a Köszöntés gomb.Javasolt fájlnév: winforms-1-2-felulet.webp · Alt szöveg: Az ablak felirattal, beviteli mezővel és gombbal a Visual Studio tervezőjében
A TextBox tartalmának kiolvasása
A beviteli mező tartalma a Text tulajdonságban van, és mindig string típusú. Az ablakos programban nem kérdezzük meg külön a felhasználót, mint a konzolban, hanem akkor olvassuk ki a mezőt, amikor történik valami (például megnyomnak egy gombot).
private void btnKoszont_Click(object sender, EventArgs e)
{
string nev = txtNev.Text;
MessageBox.Show($"Szia, {nev}!", "Köszöntés");
}Jósolj!
A mezőbe azt írod, hogy Anna, és megnyomod a gombot. Mi áll az üzenetben, és mi az ablak címe? Mi történik, ha ezután átírod a mezőt Bence-re, de nem nyomod meg újra a gombot?
Jóslat ellenőrzése
Az üzenet: Szia, Anna!, az ablak címe: Köszöntés. Ha átírod a nevet, de nem nyomod meg a gombot, semmi nem történik, mert az eseménykezelő csak kattintáskor fut le. A régi, már megjelent üzenetablak nem változik meg.
A MessageBox: cím és ikon
A MessageBox.Show() többféleképpen hívható. A legfontosabb változatok:
// csak üzenet
MessageBox.Show("Szia!");
// üzenet és cím
MessageBox.Show("Szia!", "Köszöntés");
// üzenet, cím, gomb és ikon
MessageBox.Show("Szia!", "Köszöntés", MessageBoxButtons.OK, MessageBoxIcon.Information);YesNo, OKCancel. Ezeket a 0.8 és a 7.4 leckékben használjuk.Warning, Error, Question.Mit tegyél ide: a felugró üzenetablak „Szia, Anna!” szöveggel, „Köszöntés” címmel és információs ikonnal, a program ablaka előtt.Javasolt fájlnév: winforms-1-2-messagebox.webp · Alt szöveg: Felugró üzenetablak a bevitt névvel
Mit tegyünk, ha üres a mező?
Ha a felhasználó nem ír be semmit, a program ezt mondaná: Szia, ! Ez nem szép. Ellenőriznünk kell, hogy van-e valódi bevitel. Az üres mező Text értéke üres szöveg (""), nem null.
private void btnKoszont_Click(object sender, EventArgs e)
{
string nev = txtNev.Text.Trim();
if (nev.Length == 0)
{
MessageBox.Show("Adj meg egy nevet!", "Hiányzó adat", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
else
{
MessageBox.Show($"Szia, {nev}!", "Köszöntés");
}
}Jósolj!
A mezőbe csak két szóközt írsz, és megnyomod a gombot. Melyik ág fut le?
Jóslat ellenőrzése
A figyelmeztetés ága, mert a Trim() eltávolítja a szóközöket, és a név hossza 0 lesz.
Törlés és fókusz
Kényelmesebb a program, ha a köszöntés után a mező törlődik, és a kurzor visszakerül oda, hogy rögtön a következő nevet be lehessen írni:
txtNev.Clear();
txtNev.Focus();Enterre is köszönjön?
Jelöld ki az ablakot (a Form üres részét), és a Properties ablakban állítsd az AcceptButton tulajdonságot btnKoszont-ra. Ekkor az Enter megnyomása ugyanazt csinálja, mintha a gombra kattintanál. Kódot nem kell hozzá írni.
Hibakeresés: te vagy a hibadetektív
Mi a baj, és hogyan javítod?
Gondold végig az okot, és csak utána nyisd le a megoldást.
1. Console.ReadLine az ablakban
private void btnKoszont_Click(object sender, EventArgs e)
{
string nev = Console.ReadLine();
MessageBox.Show($"Szia, {nev}!");
}Hiba és javítás
Rossz működés: az ablakos programnak nincs konzolja, a Console.ReadLine() nem a beviteli mezőből olvas. Javítás: string nev = txtNev.Text;
2. Hiányzó .Text
string nev = txtNev;
// CS0029: Cannot implicitly convert type 'TextBox' to 'string'Hiba és javítás
Fordítási hiba (CS0029): a txtNev maga a vezérlő, nem a benne lévő szöveg. A szöveget a Text tulajdonság tartalmazza: txtNev.Text.
3. Hiányzó dollárjel
MessageBox.Show("Szia, {nev}!");Hiba és javítás
Rossz működés: a felugró ablak szó szerint azt mutatja, hogy Szia, {nev}!. Szöveginterpolációhoz a szöveg elé $ jel kell: $"Szia, {nev}!".
4. Hiányzó típus
nev = txtNev.Text;
// CS0103: The name 'nev' does not exist in the current contextHiba és javítás
Fordítási hiba (CS0103): a nev változót nem hoztad létre. Add meg a típusát is: string nev = txtNev.Text;
5. A mező nem törlődik
A köszöntés után a név bent marad a mezőben. Nincs meghívva a Ok és javítás
txtNev.Clear();. Tedd az eseménykezelő végére, a MessageBox után.
Mini projekt: a köszöntő program
Állítsd össze a teljes programot:
- Label, TextBox és Button a megadott nevekkel.
- A gombnyomásra: üres név esetén figyelmeztetés, különben köszöntés a névvel.
- Az üzenet után a mező törlődik, és a kurzor visszakerül a mezőbe.
- Az Enter is működjön az
AcceptButtonbeállításával.
private void btnKoszont_Click(object sender, EventArgs e)
{
string nev = txtNev.Text.Trim();
if (nev.Length == 0)
{
MessageBox.Show("Adj meg egy nevet!", "Hiányzó adat", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
else
{
MessageBox.Show($"Szia, {nev}!", "Köszöntés", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
txtNev.Clear();
txtNev.Focus();
}Mit tegyél ide: a kész program futás közben: a beviteli mezőben egy név, mellette a felugró köszöntő ablak.Javasolt fájlnév: winforms-1-2-koszonto-kesz.webp · Alt szöveg: A kész köszöntő program egy névvel és a felugró üzenettel
Három önálló gyakorlófeladat
Egyszerre csak egyet csinálj: tervezd meg, írd meg, futtasd, ellenőrizd, és csak utána nyisd ki a megoldást.
1. Teljes név
Kérj be egy teljes nevet, és írd ki: Örülök, hogy itt vagy, ...!Egy lehetséges megoldás
MessageBox.Show($"Örülök, hogy itt vagy, {txtNev.Text}!");
2. Az üres szöveg másik módja
Írd át az üres név ellenőrzését a string.IsNullOrWhiteSpace() metódussal.Egy lehetséges megoldás
if (string.IsNullOrWhiteSpace(txtNev.Text))
{
MessageBox.Show("Adj meg nevet!");
}
else
{
MessageBox.Show($"Szia, {txtNev.Text}!");
}
3. Két beviteli mező
Tegyél az ablakra egy második TextBoxot txtVaros néven. A gombnyomásra egyetlen üzenetben jelenjen meg a név és a város.Egy lehetséges megoldás
MessageBox.Show($"{txtNev.Text} – {txtVaros.Text}");
Gyakorlótár: 6 további feladat
Három szinten gyakorolhatsz: alap, közepes és kihívás. Mindegyik feladathoz használd a txtNev beviteli mezőt és egy gombot, és csak a saját próbálkozásod után nyisd le a megoldást.
Alap szint
1. Köszöntés névvel
A A btnKoszon gomb egy felugró ablakban köszöntse a txtNev mezőbe írt nevet: Szia, Anna!Megoldás megnyitása
Text tulajdonság a beírt szöveg. A + jel a szövegeket összefűzi.private void btnKoszon_Click(object sender, EventArgs e)
{
MessageBox.Show("Szia, " + txtNev.Text + "!");
}
2. Üres név
Ha a mező üres vagy csak szóközt tartalmaz, a program figyelmeztessen, és ne köszöntsön. A Megoldás megnyitása
string.IsNullOrWhiteSpace igaz, ha a szöveg üres, vagy csak szóközökből áll. A return kilép a metódusból, ezért a köszöntés már nem fut le.private void btnKoszon_Click(object sender, EventArgs e)
{
if (string.IsNullOrWhiteSpace(txtNev.Text))
{
MessageBox.Show("Írd be a neved!", "Hiányzó adat", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
MessageBox.Show("Szia, " + txtNev.Text.Trim() + "!");
}
Közepes szint
3. Törlés gomb
Egy A btnTorol gomb törölje a mező tartalmát, és a kurzor kerüljön vissza a mezőbe.Megoldás megnyitása
Clear() kiüríti a mezőt, a Focus() a billentyűzet fókuszát a mezőre teszi, így rögtön gépelhetsz.private void btnTorol_Click(object sender, EventArgs e)
{
txtNev.Clear();
txtNev.Focus();
}
4. Igen vagy nem?
Egy A btnKilep gomb kérdezze meg: Biztosan kilépsz? Igen esetén zárja be az ablakot, nem esetén írja ki egy lblEredmeny feliratra: Maradsz.Megoldás megnyitása
MessageBox.Show eredménye egy DialogResult, amelyet változóban tárolsz, és összehasonlítasz.private void btnKilep_Click(object sender, EventArgs e)
{
DialogResult valasz = MessageBox.Show("Biztosan kilépsz?", "Kilépés", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (valasz == DialogResult.Yes)
{
this.Close();
}
else
{
lblEredmeny.Text = "Maradsz.";
}
}
Kihívás szint
5. A név visszafelé
A gomb írja ki a beírt név betűit fordított sorrendben (Anna → annA). A szöveget betűtömbbé alakítjuk (Megoldás megnyitása
ToCharArray), megfordítjuk (Array.Reverse), majd új szöveget készítünk belőle.private void btnFordit_Click(object sender, EventArgs e)
{
string nev = txtNev.Text.Trim();
if (nev.Length == 0)
{
MessageBox.Show("Írd be a neved!");
return;
}
char[] betuk = nev.ToCharArray();
Array.Reverse(betuk);
MessageBox.Show(new string(betuk));
}
6. Hossz és kezdőbetű
A program írja ki: A neved 4 karakter hosszú, a kezdőbetűje: A. Üres név esetén ne történjen hiba. A Megoldás megnyitása
Length a karakterek száma. A szöveg első betűje a nev[0] (a számozás 0-tól indul). Üres szövegnél a nev[0] hibát okozna, ezért előbb a hosszt ellenőrizzük.private void btnAdatok_Click(object sender, EventArgs e)
{
string nev = txtNev.Text.Trim();
if (nev.Length == 0)
{
MessageBox.Show("Írd be a neved!");
return;
}
MessageBox.Show($"A neved {nev.Length} karakter hosszú, a kezdőbetűje: {nev[0]}.");
}
Gyors önellenőrzés
Válaszolj fejben, és csak utána nyisd le a választ. A beviteli mezőben lévő szöveget Csak akkor, amikor a felhasználó a gombra kattint. Felugró ablakot nyit az üzenettel, opcionálisan címmel, gombokkal és ikonnal. Levágja a szöveg elejéről és végéről a szóközöket. Mert az ablakos programnak nincs konzolja. A beviteli mezőből a TextBox Text tulajdonságával olvasunk. A Clear kitörli a mező tartalmát, a Focus a kurzort a mezőbe teszi.1. Mit ad vissza a txtNev.Text?
string típusként.2. Mikor fut le a Click eseménykezelő?
3. Mire való a MessageBox.Show?
4. Mit csinál a Trim()?
5. Miért nem használható a Console.ReadLine() az ablakos programban?
6. Mire való a Clear() és a Focus()?
Mit tudsz már?
- Kiolvasod a TextBox tartalmát a Text tulajdonsággal.
- Felugró ablakot nyitsz címmel és ikonnal.
- Kezeled az üres és a szóközös bevitelt.
- Törlöd a mezőt, és visszaadod a kurzort.
- Tudod, miért nem a Console.ReadLine() kell az ablakos programban.
Következő lecke: számolás TextBoxokkal és TryParse
Eddig szöveget olvastunk be. A következő leckében számokat kérünk be, és számolunk velük.




