Grafikus C# – Windows Forms tanfolyam › 2.9 lecke

Windows Forms · 2.9 lecke

Névmező, felugró ablak és About menü

Minden komolyabb program tartalmaz egy „Névjegy” (About) ablakot, amelyből kiderül, ki készítette. A MiniWordhöz két ilyen dolgot adunk: egy névmezőt, amelybe beírt nevet felugró ablak mutatja meg, és egy About menüt, amely megmutatja a készítő nevét, a dátumot és a tanár nevét.

  • kb. 50 perc
  • kezdő szint
  • MessageBox és MenuStrip
Diák C# programozást gyakorol egy tanulósarokban

A lecke végére

  • egy beviteli mezőbe írt szöveget felugró ablakban jelenítesz meg;
  • kezeled az üres és a szóközökkel kitöltött mezőt (Trim());
  • létrehozol egy MenuStrip menüsort File és About menüvel;
  • az About menüben megjeleníted a készítő nevét, a dátumot és a tanár nevét;
  • a sortörést Environment.NewLine segítségével illeszted az üzenetbe;
  • a Kilépés menüponttal bezárod az ablakot.

Mielőtt elkezded

Ehhez a leckéhez kell a MiniWord a 2.8 lecke után, a MessageBox és az if–else ismerete, valamint a menüsor alapjai.

2.8 Szövegkeresés →

1.7 MenuStrip – File, About, Exit →

A névmező és a gomb

Tegyél a MiniWord ablakára egy beviteli mezőt és egy gombot:

txtTanarEgy TextBox: ide írja be a felhasználó a tanár nevét (vagy bármilyen nevet).
btnNevEgy gomb Név megjelenítése felirattal: ennek megnyomására ugrik fel az ablak.
📷 Képernyőkép helye

Mit tegyél ide: a MiniWord felső sora a txtTanar mezővel és a Név megjelenítése gombbal. A mezőben egy példanév (például „Nagy Péter”) látszik.Javasolt fájlnév: winforms-2-9-nevmezo.webp · Alt szöveg: A MiniWord névmezője és a név megjelenítése gomb

Az About ablak

Az About menüpontra kattintva egy felugró ablak mutatja meg, ki készítette a programot és mikor, majd a Tanára: szöveg után a névmezőbe beírt nevet. Kattints duplán a menüpontra, így létrejön az eseménykezelő:

Form1.csC#
private void miAbout_Click(object sender, EventArgs e)
{
string tanar = txtTanar.Text.Trim();

if (tanar.Length == 0)
{
tanar = "(még nincs megadva)";
}

string uzenet = "MiniWord szövegszerkesztő" + Environment.NewLine
+ "Készítette: Minta Anna" + Environment.NewLine
+ "Dátum: 2026. október 24." + Environment.NewLine
+ "Tanára: " + tanar;

MessageBox.Show(uzenet, "About");
}
Environment.NewLineSortörés a szövegben. Ettől lesz minden adat külön sorban.
"Készítette: Minta Anna"Ide írd a saját neved! A dátumot is írd át a program elkészítésének napjára.
"Tanára: " + tanarA „Tanára:” szöveg után a névmezőbe beírt név jelenik meg.
MessageBox.Show(uzenet, "About")A második paraméter az ablak címsora.

Fix dátum, nem mai dátum

A feladat azt kéri, hogy az About ablak a program elkészítésének idejét mutassa, ezért a dátumot szövegként beírjuk. A DateTime.Now az aktuális időt adná meg, vagyis azt, hogy mikor nyitják meg az ablakot, ami nem ugyanaz.

📷 Képernyőkép helye

Mit tegyél ide: az About felugró ablak négy sorral: „MiniWord szövegszerkesztő”, „Készítette: …”, „Dátum: …” és „Tanára: Nagy Péter” (a névmezőbe beírt név).Javasolt fájlnév: winforms-2-9-about.webp · Alt szöveg: Az About ablak a készítő nevével, a dátummal és a tanár nevével

Jósolj!

Az About ablak megnyitása előtt a névmezőbe beírod, hogy „Kiss Béla”. Nyitsd meg az About ablakot, majd írd át a nevet „Nagy Péter” névre, és nyisd meg újra. Mit látsz másodszor?

Jóslat ellenőrzése

A „Tanára: Nagy Péter” szöveget, mert az eseménykezelő minden megnyitáskor újra kiolvassa a névmező aktuális tartalmát.

A Kilépés menüpont

A Kilépés menüpont bezárja az ablakot. Kattints duplán a miKilepes menüpontra, és írd be:

Form1.csC#
private void miKilepes_Click(object sender, EventArgs e)
{
this.Close();
}

A this.Close() bezárja az ablakot, ugyanúgy, mintha az X gombra kattintottál volna. Ha van FormClosing eseménykezelőd (0.8 lecke), az ilyenkor is lefut, ezért a megerősítő kérdés a menüből való kilépésnél is megjelenik.

Jósolj, aztán futtasd!

Minden feladatnál először írd le, mit vársz, és csak utána próbáld ki.

1. Üres névmező

A névmező üres, és megnyitod az About ablakot. Mit mutat a „Tanára:” sor?

Jóslat ellenőrzése

A „Tanára: (még nincs megadva)” szöveget, mert az üres nevet kicseréljük egy helyettesítő szövegre.

2. A Kilépés menüpont

A programban van FormClosing eseménykezelő, amely rákérdez a kilépésre. A File → Kilépés menüpontra kattintasz. Megjelenik a kérdés?

Jóslat ellenőrzése

Igen, mert a Close() metódus is kiváltja a FormClosing eseményt.

3. Hosszú név

A névmezőbe egy nagyon hosszú nevet írsz. Mi történik az About ablakkal?

Jóslat ellenőrzése

Az üzenetablak szélesebb lesz, vagy a szöveg több sorba törik. A program nem hibázik, mert a szöveg hossza nincs korlátozva.

Hibakeresés: te vagy a hibadetektív

Hibavadászat

Jósold meg, hogy fordítási hiba, futás közbeni hiba vagy rossz működés lesz-e. Csak utána nyisd le a megoldást.

1. Furcsa szöveg a név helyett

MessageBox.Show("Tanára: " + txtTanar);
Hiba és javítás

Rossz működés: a felugró ablak „Tanára: System.Windows.Forms.TextBox, Text: ...” szöveget mutat, mert nem a szöveget, hanem magát a vezérlőt fűztük hozzá. Javítás: txtTanar.Text.

2. A menüpont nem csinál semmit

Az About menüpontra kattintasz, de nem jelenik meg ablak.

Ok és javítás

Az eseménykezelő nincs összekötve a menüponttal. Kattints duplán az About menüpontra a tervezőben, hogy a Visual Studio létrehozza az összekötött miAbout_Click metódust, vagy a Properties ablak Events nézetében válaszd ki a Click sornál.

3. Minden egy sorban

string uzenet = "Készítette: Minta Anna" + "Dátum: 2026. október 24.";
Hiba és javítás

Rossz működés: a két szöveg közé nem került sortörés, ezért összefolynak: „Készítette: Minta AnnaDátum: ...”. Javítás: tegyél közéjük Environment.NewLine-t.

4. Ismeretlen név

miAbout.Text = "About";
// CS0103: The name 'miAbout' does not exist in the current context
Hiba és javítás

Fordítási hiba (CS0103): a menüpont (Name) tulajdonsága még az alapértelmezett (például aboutToolStripMenuItem). Írd át a Properties ablakban miAbout-ra, vagy használd a kódban a valódi nevet.

5. Üres név az About ablakban

Az About ablakban a „Tanára:” után nem áll semmi.

Ok és javítás

Nincs név beírva a mezőbe, vagy a program nem ellenőrzi az üres értéket. Használd a leckében látott if (tanar.Length == 0) ellenőrzést, hogy ilyenkor helyettesítő szöveg jelenjen meg.

Mini projekt: a MiniWord névjegye

Állítsd össze a MiniWord névjegyét és a menüt:

  1. Névmező (txtTanar) és btnNev gomb a felugró ablakkal.
  2. MenuStrip File (Megnyitás, Mentés, Kilépés) és About menüvel.
  3. Az About ablak mutassa a saját neved, a dátumot és a „Tanára:” után a névmező tartalmát.
  4. A Kilépés menüpont zárja be az ablakot.
  5. Próbáld ki üres és kitöltött névmezővel is.
📷 Képernyőkép helye

Mit tegyél ide: a kész MiniWord menüsorral és névmezővel, az About ablak megnyitva a háttérben látszó MiniWord előtt.Javasolt fájlnév: winforms-2-9-miniword-nevjegy.webp · Alt szöveg: A MiniWord About ablaka a készítő nevével és a tanár nevével

Önálló gyakorlófeladatok

Először készíts saját megoldást. A lenyitható rész csak ellenőrzéshez van.

1. Ikon az About ablakon

Az About ablakon jelenjen meg egy információs ikon, és az üzenetablak csak egy OK gombot mutasson.

Egy lehetséges megoldás
MessageBox.Show(uzenet, "About", MessageBoxButtons.OK, MessageBoxIcon.Information);

2. A név az ablak címében

A Név megjelenítése gomb nyomására a név kerüljön az ablak címsorába is: MiniWord – Nagy Péter.

Egy lehetséges megoldás
this.Text = "MiniWord – " + nev;

Ezt az else ágba tedd, a MessageBox.Show sor mellé.

3. Mai dátum a címkén

Tegyél az ablakra egy lblDatum címkét, amely a mai dátumot mutatja, például Ma: 2026. 10. 24..

Egy lehetséges megoldás
lblDatum.Text = "Ma: " + DateTime.Now.ToString("yyyy. MM. dd.");

Tedd a Form1_Load eseménykezelőbe, hogy induláskor megjelenjen. A DateTime.Now az aktuális idő, a ToString("yyyy. MM. dd.") pedig a megadott formátumra alakítja.

Gyakorlótár: 6 további feladat

Három szinten gyakorolhatsz: alap, közepes és kihívás. A feladatokhoz egy txtTanar beviteli mező, egy btnNev gomb és egy MenuStrip kell. Csak a próbálkozás után nyisd le a megoldást.

Alap szint

1. A név felugró ablakban

A btnNev gomb jelenítse meg a beírt nevet egy felugró ablakban. Üres névnél figyelmeztessen.

Megoldás megnyitása

A Trim() levágja a szóközöket, így a csak szóközből álló név is üresnek számít.

Form1.csC#
private void btnNev_Click(object sender, EventArgs e)
{
string nev = txtTanar.Text.Trim();

if (nev.Length == 0)
{
MessageBox.Show("Kérlek, írj be egy nevet!", "Hiányzó adat", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}

MessageBox.Show("A beírt név: " + nev);
}

2. About ablak

Az About menüpont (miAbout) mutassa három sorban: a program nevét, a készítőt és a Tanára: sort a névmező tartalmával.

Megoldás megnyitása

A sorokat az Environment.NewLine választja el. Ha a névmező üres, jelezzük, hogy a név még nincs megadva.

Form1.csC#
private void miAbout_Click(object sender, EventArgs e)
{
string tanar = txtTanar.Text.Trim();

if (tanar.Length == 0)
{
tanar = "(még nincs megadva)";
}

MessageBox.Show("MiniWord szövegszerkesztő" + Environment.NewLine
+ "Készítette: Minta Anna" + Environment.NewLine
+ "Tanára: " + tanar, "About");
}

Közepes szint

3. A mai dátum az About ablakban

Az About ablak a Dátum: sorban mutassa a mai dátumot magyar formában (például 2026. október 25.), ne rögzített szöveget.

Megoldás megnyitása

A DateTime.Today a mai dátum. A ToString("yyyy. MMMM d.") a formátumot adja meg: az MMMM a hónap teljes neve, ami magyar nyelvű Windowson magyarul jelenik meg. Ha a program elkészítésének napját szeretnéd mutatni, azt rögzített szövegként add meg, mert a mai dátum másnap már mást mutatna.

Form1.csC#
string datum = DateTime.Today.ToString("yyyy. MMMM d.");

MessageBox.Show("Dátum: " + datum, "About");

4. A név megjegyzése

A név a gombnyomásra kerüljön egy mezőbe, és az About ablak csak ezt használja, akkor is, ha később átírják a mezőt, és nem nyomják meg újra a gombot.

Megoldás megnyitása

A név mezőben (tanarNeve) tárolódik, amely a metódusok között is megmarad. A gomb rögzíti, az About csak olvassa.

Form1.csC#
private string tanarNeve = "";

private void btnNev_Click(object sender, EventArgs e)
{
string nev = txtTanar.Text.Trim();

if (nev.Length == 0)
{
MessageBox.Show("Kérlek, írj be egy nevet!");
return;
}

tanarNeve = nev;
MessageBox.Show("Rögzítve: " + tanarNeve);
}

private void miAbout_Click(object sender, EventArgs e)
{
string tanar = tanarNeve.Length == 0 ? "(még nincs megadva)" : tanarNeve;

MessageBox.Show("Tanára: " + tanar, "About");
}

Kihívás szint

5. F1 gyorsbillentyű

Az About menüponthoz rendeld az F1 billentyűt. Hogyan, és mit kell tenned a kódban?

Megoldás megnyitása

Jelöld ki a miAbout menüpontot, és a Properties ablakban a ShortcutKeys tulajdonságnál válaszd az F1 billentyűt (módosító nélkül). Kódot nem kell írnod: az F1 ugyanazt a Click eseménykezelőt hívja, amelyet a menüpont kattintása. A menü mellett megjelenik a gyorsbillentyű felirata.

6. Saját About ablak

Az egyszerű üzenetablak helyett készíts külön AboutForm ablakot, amelynek van egy címsora, egy lblTanar felirata és egy Bezár gombja. A főablak adja át neki a tanár nevét.

Megoldás megnyitása

Új ablak: a projekten jobb gomb, Add → Form (Windows Forms), a neve AboutForm. Az új ablak konstruktora paraméterként kapja a nevet. A ShowDialog() addig tartja nyitva az ablakot, amíg be nem zárják, és közben a főablak nem használható. A using blokk a végén felszabadítja az ablak erőforrásait.

AboutForm.csC#
public partial class AboutForm : Form
{
public AboutForm(string tanar)
{
InitializeComponent();
lblTanar.Text = "Tanára: " + tanar;
}

private void btnBezar_Click(object sender, EventArgs e)
{
this.Close();
}
}
Form1.csC#
private void miAbout_Click(object sender, EventArgs e)
{
using (AboutForm ablak = new AboutForm(txtTanar.Text.Trim()))
{
ablak.ShowDialog();
}
}

Gyors önellenőrzés

Válaszolj fejben, és csak utána nyisd le a választ.

1. Mit csinál a Trim()?

Levágja a szöveg elejéről és végéről a szóközöket.

2. Hogyan olvasod ki a TextBox tartalmát?

A Text tulajdonsággal, például txtTanar.Text.

3. Mire való az Environment.NewLine?

Sortörést tesz a szövegbe, hogy az üzenet több sorban jelenjen meg.

4. Miért fix szöveg a dátum az About ablakban?

Mert a program elkészítésének dátumát kell mutatnia, nem az aktuális időt.

5. Mit csinál a this.Close()?

Bezárja az ablakot, és kiváltja a FormClosing eseményt.

6. Hogyan hozod létre a menüpont eseménykezelőjét?

A menüpontra duplán kattintasz a tervezőben.

Mit tudsz már?

  • Felugró ablakban megjelenítesz egy beírt nevet.
  • Kezeled az üres és a szóközös mezőt a Trim segítségével.
  • Létrehozol egy menüsort File és About menüvel.
  • Az About ablakban megjeleníted a készítőt, a dátumot és a tanár nevét.
  • A Kilépés menüponttal bezárod az ablakot.

Következő lecke: a MiniWord összeépítése

Minden darab megvan. A következő leckében összeállítjuk a teljes MiniWordöt: a menüpontok a megnyitást és a mentést is elvégzik, és végigpróbáljuk az egész programot.