Grafikus C# – Windows Forms tanfolyam › 1.7 lecke Windows Forms · 1.7 lecke · önálló gyakorlás Szinte minden ablakos programnak van menüsora. Ebben a leckében megtanulsz menüt építeni, a menüpontokhoz kódot kötni, gyorsbillentyűt adni, és kijelölhető menüpontot készíteni. A leckében készült menüt később a szövegszerkesztőnk is használni fogja.MenuStrip – File, Nézet, About és Kilépés

A lecke végére
- felépítesz egy
MenuStripmenüsort menüpontokkal és elválasztóval; - a menüpontokhoz
Clickeseménykezelőt kötsz; - gyorsbillentyűt (
ShortcutKeys) és Alt-billentyűs hívást (&) adsz a menüpontokhoz; - kijelölhető menüpontot készítesz (
CheckOnClick,Checked); - a
MessageBoxeredményét (DialogResult) felhasználod egy megerősítő kérdésnél; - érted, miért nem csinál semmit a legfelső menüpont, ha almenüje van.
Mielőtt elkezded
Ehhez a leckéhez kell az 1.6 lecke és az if–else ismerete. A Megnyitás és a Mentés menüpont fájlkezelő kódját a 2.2 és a 2.3 lecke adja.
A menüsor felépítése
A MenuStrip az ablak tetején lévő menüsor, a benne lévő kattintható elemek pedig ToolStripMenuItem típusúak. Építsd fel a menüt:
- A Toolbox Menus & Toolbars csoportjából húzz egy
MenuStripelemet az ablakra. Az ablak tetején jelenik meg, és alul, a komponenssávban is látszik. - Kattints a Type Here mezőre, és írd be:
&File. Az&jel azt jelenti, hogy a következő betű (az F) alá lesz húzva, és Alt+F billentyűvel nyitható a menü. - A File alatt írd be sorban:
Új,Megnyitás,Mentés. Az elválasztóvonalhoz írj be egyetlen kötőjelet (-), majd a vonal alá:Kilépés. - A File mellé új főmenüpontként írd be:
Nézet, majd alá:Állapotsor. Mellé:About.
A menüpontokat nevezd el beszédesen (Properties ablak, (Name)). Az előtag mi a menu item (menüelem) rövidítése:
msFo-ra, de a kódban nem fogjuk használni.Mit tegyél ide: a tervezőnézet a MenuStrippel. A File menü le van nyitva: Új, Megnyitás, Mentés, elválasztóvonal, Kilépés. A Nézet és az About főmenüpont is látszik.Javasolt fájlnév: winforms-1-7-menustrip.webp · Alt szöveg: A tervezőben épített File, Nézet és About menü
A Kilépés és az About menüpont
A menüpontok Click eseménye ugyanúgy működik, mint a gomboké. Kattints duplán a menüpontra, és a Visual Studio létrehozza az eseménykezelőt:
private void miKilepes_Click(object sender, EventArgs e)
{
this.Close();
}
private void miAbout_Click(object sender, EventArgs e)
{
MessageBox.Show("Program: Menü gyakorló" + Environment.NewLine + "Készítő: Minta Anna" + Environment.NewLine + "Dátum: 2026. október 24.", "About");
}this az ablakot jelenti.Close vagy Application.Exit?
Egyablakos programnál mindkettő leállítja a programot. A this.Close() az ablakot zárja be, ezért egyszerűbb és természetesebb. Az Application.Exit() az egész alkalmazást leállítja. Később, több ablaknál lesz a különbség fontos.
Jósolj!
A programban a File menü Megnyitás pontjára kattintasz, de ahhoz még nem készítettél eseménykezelőt. Mi történik?
Jóslat ellenőrzése
Semmi nem történik. A menüpont lenyomható, de nincs hozzá kód. Ezért a menüpontokhoz mindig külön eseménykezelőt kell kötni. A Megnyitás és Mentés kódját a 2.2 és 2.3 leckében írjuk meg.
Gyorsbillentyűk
A menüpontokhoz kétféle billentyűs elérést adhatsz, kód nélkül:
& jel utáni betű alá lesz húzva. Például &File esetén az Alt+F nyitja a menüt.ShortcutKeys tulajdonságnál legördülő listából kiválaszthatod a billentyűkombinációt, például a Mentéshez a Ctrl+S, a Megnyitáshoz a Ctrl+O kombinációt.A gyorsbillentyű ugyanazt hívja
Ha a Mentés menüpontnak Ctrl+S gyorsbillentyűt adsz, annak megnyomása is a menüpont Click eseménykezelőjét futtatja. Külön kódot nem kell írni.
Mit tegyél ide: a Properties ablak egy menüponttal kijelölve, a ShortcutKeys tulajdonság legördülő listájában a Ctrl és az S kiválasztva. Mellette a futó menü, amelyben a Mentés mellett megjelenik a „Ctrl+S” felirat.Javasolt fájlnév: winforms-1-7-gyorsbillentyu.webp · Alt szöveg: A ShortcutKeys beállítása egy menüpontnál és a gyorsbillentyű a menüben
Kijelölhető menüpont: az Állapotsor
Bizonyos menüpontok be- és kikapcsolhatók, mellettük pipa látszik (például Nézet → Állapotsor). Tegyél az ablak aljára egy lblAllapot feliratot („Kész”), majd állítsd az miAllapot menüpont CheckOnClick tulajdonságát True-ra. A Checked tulajdonság igaz/hamis érték, a CheckedChanged esemény pedig a változáskor fut le:
private void miAllapot_CheckedChanged(object sender, EventArgs e)
{
lblAllapot.Visible = miAllapot.Checked;
}Checked tulajdonságát True-ra a tervezőben, hogy a felirat induláskor is látszódjon.Jósolj!
Az Állapotsor menüpont be van pipálva, a felirat látszik. Kétszer rákattintasz a menüpontra. Mi látszik a végén?
Jóslat ellenőrzése
Az első kattintásra a pipa kikapcsol, a felirat eltűnik, a másodikra újra bekapcsol, és a felirat megjelenik. A végén tehát látszik a felirat, és be van pipálva a menüpont.
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. A File feliratra nem történik semmi
A File menüre kattintasz, de nem fut le semmi, pedig megírtad az eseménykezelőt. A File a legfelső gyűjtőmenü, amely csak lenyitja az almenüt. A műveletet az almenü elemeihez (Megnyitás, Mentés, Kilépés) kell kötni.Ok és javítás
2. Ismeretlen menüpont neve
miKilepes.Text = "Kilépés";
// CS0103: The name 'miKilepes' does not exist in the current contextOk és javítás
Fordítási hiba (CS0103): a menüpont (Name) tulajdonsága még az alapértelmezett (például kilépésToolStripMenuItem). Írd át miKilepes-re a Properties ablakban.
3. Nem történik semmi kattintásra
Kattintasz az About menüpontra, de nem jelenik meg az ablak. Az eseménykezelő nincs összekötve a menüponttal. Kattints duplán a menüpontra a tervezőben, hogy a Visual Studio létrehozza az összekötött Ok és javítás
miAbout_Click metódust.
4. Mindig kilép, nem kérdez
MessageBox.Show("Biztosan kilépsz?", "Kilépés", MessageBoxButtons.YesNo);
this.Close();Ok és javítás
Rossz működés: a program a kérdés után feltétel nélkül bezár, mert a válasz nincs ellenőrizve. A MessageBox.Show() visszaadja, melyik gombot nyomták meg. Ezt kell vizsgálni egy if feltétellel (lásd a mini projektet).
5. Az elválasztóvonal helyett kötőjel látszik
A menüben egy „-” szöveget tartalmazó menüpont jelent meg. A menü szerkesztőjében csak akkor jön létre elválasztóvonal, ha egyetlen kötőjelet gépelsz be az új elem helyére. Ha már szöveggel kitöltött menüelem lett belőle, töröld, és a Type Here mezőbe írd be újra a kötőjelet. Vagy a menüelem helyi menüjében (jobb gomb) válaszd az Insert → Separator lehetőséget.Ok és javítás
Mini projekt: menüs ablak
Állítsd össze a teljes menüs ablakot:
- Menüsor: File (Új, Megnyitás, Mentés, elválasztó, Kilépés), Nézet (Állapotsor) és About.
- Az Új, Megnyitás és Mentés menüpont egyelőre csak egy üzenetet mutat (például „A fájlkezelő leckében készül el.”).
- Az Állapotsor kapcsolja a
lblAllapotláthatóságát. - A Kilépés előtt kérdezzen rá a program.
- Adj gyorsbillentyűt a Megnyitáshoz (Ctrl+O) és a Mentéshez (Ctrl+S).
private void miKilepes_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();
}
}
private void miMegnyitas_Click(object sender, EventArgs e)
{
MessageBox.Show("A fájlkezelő leckében készül el.");
}Yes vagy No. A MessageBox.Show() adja vissza.Mit tegyél ide: a futó program a megerősítő kérdéssel („Biztosan kilépsz?” Igen/Nem gombbal és kérdőjeles ikonnal), a háttérben a lenyitott File menü.Javasolt fájlnév: winforms-1-7-kilepes-kerdes.webp · Alt szöveg: Megerősítő ablak a Kilépés menüpont megnyomásakor
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. Saját About ablak
Az About ablak mutassa a program nevét, a te neved és az elkészítés dátumát külön sorokban.Egy lehetséges megoldás
MessageBox.Show("Program: Menü gyakorló" + Environment.NewLine
+ "Készítő: Saját Nevem" + Environment.NewLine
+ "Dátum: 2026", "About");
2. A Mentés csak szöveggel él
Tegyél az ablakra egy Az txtSzoveg beviteli mezőt. A Mentés menüpont induláskor legyen letiltva, és akkor kapcsoljon be, ha a mezőben van szöveg.Egy lehetséges megoldás
// A tervezőben: miMentes.Enabled = False
private void txtSzoveg_TextChanged(object sender, EventArgs e)
{
miMentes.Enabled = txtSzoveg.Text.Length > 0;
}Enabled tulajdonság azt szabályozza, hogy használható-e a menüpont. Az összehasonlítás eredménye igaz vagy hamis, ezt kapja a tulajdonság.
3. Gyorsbillentyűk
Add a Megnyitáshoz a Jelöld ki a menüpontot, és a Properties ablakban állítsd a Ctrl+O, a Mentéshez a Ctrl+S, a Kilépéshez az Alt+F4 vagy a Ctrl+Q billentyűkombinációt, és próbáld ki őket.Egy lehetséges megoldás
ShortcutKeys tulajdonságot a legördülő listából. Kódot nem kell írni, a gyorsbillentyű a menüpont Click eseménykezelőjét futtatja.
Gyakorlótár: 6 további feladat
Három szinten gyakorolhatsz: alap, közepes és kihívás. Minden feladathoz használj egy MenuStrip vezérlőt. Csak a próbálkozás után nyisd le a megoldást.
Alap szint
1. About menüpont
Készíts egy Súgó → About menüpontot ( A menüpontra duplán kattintva jön létre a miAbout), amely felugró ablakban megmutatja a program nevét és a készítő nevét két sorban.Megoldás megnyitása
Click eseménykezelő. A sortörést az Environment.NewLine adja.private void miAbout_Click(object sender, EventArgs e)
{
MessageBox.Show("Menü gyakorló program" + Environment.NewLine + "Készítő: Minta Anna", "About");
}
2. Kilépés megerősítéssel
A File → Kilépés menüpont ( A miKilepes) kérdezzen rá, biztosan kilép-e a felhasználó.Megoldás megnyitása
this.Close() az ablakot zárja be, és mivel ez a főablak, a program is leáll.private void miKilepes_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();
}
}
Közepes szint
3. Színváltó menü
Készíts Nézet → Háttérszín almenüt három ponttal ( A háromszintű menüt úgy készítheted, hogy a Háttérszín menüpont alá újabb elemeket írsz a tervezőben. Mindegyik pontnak külön miPiros, miZold, miKek), amelyek az ablak háttérszínét állítják.Megoldás megnyitása
Click eseménykezelője van.private void miPiros_Click(object sender, EventArgs e)
{
this.BackColor = Color.LightCoral;
}
private void miZold_Click(object sender, EventArgs e)
{
this.BackColor = Color.LightGreen;
}
private void miKek_Click(object sender, EventArgs e)
{
this.BackColor = Color.LightSkyBlue;
}
4. Sötét mód kapcsoló
A Nézet → Sötét mód menüpont ( A menüpont miSotet) kapcsolóként működjön: bekapcsolva sötét háttér és világos betűk, kikapcsolva az alapértelmezett színek.Megoldás megnyitása
CheckOnClick tulajdonságát állítsd True értékre, így kattintásra pipa jelenik meg mellette. A CheckedChanged eseményben a Checked értékétől függően állítod a színeket.private void miSotet_CheckedChanged(object sender, EventArgs e)
{
if (miSotet.Checked)
{
this.BackColor = Color.DimGray;
this.ForeColor = Color.White;
}
else
{
this.BackColor = SystemColors.Control;
this.ForeColor = SystemColors.ControlText;
}
}
Kihívás szint
5. Dátum beszúrása
Az ablakon legyen egy többsoros A txtSzoveg mező. A Beszúrás → Mai dátum menüpont fűzze a mező végéhez az aktuális dátumot és időt egy új sorban.Megoldás megnyitása
Multiline tulajdonságot állítsd True értékre. Az AppendText a szöveg végére fűz, a ToString("...") a dátumot a megadott formátumban adja vissza.private void miDatum_Click(object sender, EventArgs e)
{
txtSzoveg.AppendText(DateTime.Now.ToString("yyyy. MM. dd. HH:mm") + Environment.NewLine);
}
6. Gyorsbillentyű
Add a Kilépés menüponthoz a Jelöld ki a Ctrl+Q gyorsbillentyűt. Hogyan teszed, és hogyan látszik a menüben?Megoldás megnyitása
miKilepes menüpontot, és a Properties ablakban nyisd le a ShortcutKeys tulajdonságot: pipáld be a Ctrl módosítót, és válaszd a Q billentyűt. A ShowShortcutKeys tulajdonság True értéke esetén a menüpont mellett megjelenik a Ctrl+Q felirat. Kódot nem kell írnod: a billentyű ugyanazt a Click eseménykezelőt hívja. Ügyelj arra, hogy ne használj olyan kombinációt, amely a szövegmezőkben máshol szükséges (például Ctrl+C, Ctrl+V).
Gyors önellenőrzés
Válaszolj fejben, és csak utána nyisd le a választ. A A menüpontra duplán kattintasz a tervezőben. A következő betű alá lesz húzva, és az Alt billentyűvel együtt megnyomva kinyitja a menüt vagy elindítja a menüpontot. A Egy A 1. Melyik vezérlő a menüsor, és melyik a menüpont?
MenuStrip a menüsor, a ToolStripMenuItem egy menüpont.2. Hogyan hozod létre a menüpont eseménykezelőjét?
3. Mit jelent az & jel a menüpont szövegében?
4. Hogyan állítasz be gyorsbillentyűt?
ShortcutKeys tulajdonsággal a Properties ablakban.5. Mit ad vissza a MessageBox.Show(), és mire használjuk?
DialogResult értéket: azt, hogy melyik gombot nyomták meg. Ezt egy if feltétellel megvizsgálhatjuk, például a kilépés megerősítésénél.6. Mire való a CheckOnClick és a Checked?
CheckOnClick miatt a kattintás automatikusan be- és kikapcsolja a menüpont pipáját, a Checked megmondja, hogy be van-e pipálva.
Mit tudsz már?
- Felépítesz egy menüsort menüpontokkal és elválasztóval.
- Menüpontokhoz eseménykezelőt kötsz.
- Gyorsbillentyűt adsz a menüpontokhoz.
- Kijelölhető menüpontot készítesz.
- Megerősítő kérdést használsz a kilépésnél.
Következő lecke: ProgressBar és Timer
A menü kész. A következő leckében folyamatjelzőt és időzítőt használunk.





