Grafikus C# – Windows Forms tanfolyam › 2.6 lecke Windows Forms · 2.6 lecke Egy szövegszerkesztőben nemcsak a betűket, hanem a bekezdések elrendezését is megadhatod: a cím lehet középre igazítva, egy dátum jobbra, a szöveg balra. Ebben a leckében három igazítógombot készítünk a MiniWordhöz, és megismerjük, mi számít bekezdésnek a RichTextBoxban.Bekezdésigazítás: balra, jobbra, középre

A lecke végére
- érted, mit jelent a bekezdés a RichTextBoxban;
- a
SelectionAlignmenttulajdonsággal balra, jobbra és középre igazítasz; - ismered a
HorizontalAlignmentfelsorolást; - tudod, hogy a sorkizárt igazításhoz külön megoldás kell, és hogy miért;
- három gombbal igazítást kezelő eseménykezelőket írsz;
- felsorolást és behúzást is beállítasz bekezdésekre.
Mielőtt elkezded
Ehhez a leckéhez kell a MiniWord a 2.5 lecke után, valamint a Click eseménykezelő és a Focus() ismerete.
Mi számít bekezdésnek?
A RichTextBoxban a bekezdés az a szövegrész, amely az egyik Enter-lenyomástól a következőig tart. Ha egy hosszú mondat az ablak szélén több sorba törik, az még mindig egyetlen bekezdés, mert nem nyomtál közben Entert. Az igazítás mindig a teljes bekezdésre vonatkozik, nem csak a kijelölt részre.
Jósolj!
Egy három mondatos bekezdés közepén kijelölsz egyetlen szót, és jobbra igazítást kérsz. Mi igazodik jobbra?
Jóslat ellenőrzése
A teljes bekezdés mindhárom mondatával együtt, nem csak a kijelölt szó. A bekezdés az igazítás legkisebb egysége.
A SelectionAlignment tulajdonság
A RichTextBox SelectionAlignment tulajdonsága állítja a kijelölt bekezdés igazítását. Az értéke a HorizontalAlignment felsorolás egyik eleme:
FontStyle is ilyen volt a 2.4 leckében.rtbDokumentum.SelectionAlignment = HorizontalAlignment.Center;Három igazítógomb
Tegyél a formázó sorba három gombot, és állítsd be a tulajdonságaikat:
Text: BalraText: KözépreText: Jobbraprivate void btnBalra_Click(object sender, EventArgs e)
{
rtbDokumentum.SelectionAlignment = HorizontalAlignment.Left;
rtbDokumentum.Focus();
}
private void btnKozep_Click(object sender, EventArgs e)
{
rtbDokumentum.SelectionAlignment = HorizontalAlignment.Center;
rtbDokumentum.Focus();
}
private void btnJobbra_Click(object sender, EventArgs e)
{
rtbDokumentum.SelectionAlignment = HorizontalAlignment.Right;
rtbDokumentum.Focus();
}Mit tegyél ide: a MiniWord három bekezdéssel, amelyek közül az első balra, a második középre, a harmadik jobbra igazított. Fent látszik a három igazítógomb.Javasolt fájlnév: winforms-2-6-igazitasok.webp · Alt szöveg: A MiniWord három különbözően igazított bekezdéssel
Te jössz!
Írj három rövid bekezdést Enter-ekkel elválasztva, majd az első legyen balra, a második középre, a harmadik jobbra igazítva. Mentsd el RTF fájlként, és nyisd meg újra: az igazítás megmarad.
És a sorkizárt igazítás?
A Wordben négy igazítás van: balra, középre, jobbra és sorkizárt. A sorkizártnál a sorok mindkét széle egyenes, a szóközök kicsit nyúlnak. Próbáld ki, mi történik, ha ezt is szeretnéd megírni a fent látott minta alapján:
rtbDokumentum.SelectionAlignment = HorizontalAlignment.Justify;
// CS0117: 'HorizontalAlignment' does not contain a definition for 'Justify'A HorizontalAlignment felsorolásnak csak három eleme van: Left, Center, Right. A sorkizárt (angolul justify) hiányzik, és a RichTextBox SelectionAlignment tulajdonsága sem tudja kezelni.
A sorkizárt külön megoldást kér
A Windows Forms RichTextBox mögött a Windows saját szövegszerkesztő komponense dolgozik, amely tud sorkizártat is, de ezt a .NET nem teszi elérhetővé. A következő lecke megmutatja, hogyan lehet mégis elérni a Windows funkcióit. Ez haladó téma, ezért külön lecke szól róla.
Bónusz: felsorolás és behúzás
A bekezdések két másik tulajdonságát is könnyű beállítani:
true esetén a bekezdés elején felsorolásjel (pont) jelenik meg.30).private void btnFelsorolas_Click(object sender, EventArgs e)
{
rtbDokumentum.SelectionBullet = !rtbDokumentum.SelectionBullet;
rtbDokumentum.Focus();
}
private void btnBehuzas_Click(object sender, EventArgs e)
{
rtbDokumentum.SelectionIndent = 30;
rtbDokumentum.Focus();
}A felsorolás gombban a ! (nem) jel megfordítja a logikai értéket: ha be volt kapcsolva, kikapcsolja, ha nem, bekapcsolja. Ez hasonló a 2.4 leckében látott kapcsoló gondolathoz.
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. Hosszú bekezdés
Egy hosszú szöveget Enter nélkül gépelsz be, hogy több sorba törjön, majd a végére kattintasz, és középre igazítást kérsz. Mi igazodik? Az egész szöveg, mert az Enter nélküli szöveg egyetlen bekezdés. Az automatikus sortörés nem hoz létre új bekezdést.Jóslat ellenőrzése
2. Két bekezdés
Két bekezdésből az elsőnek csak az utolsó szavát, a másodiknak csak az első szavát jelölöd ki, majd jobbra igazítást kérsz. Mi igazodik jobbra? Mindkét bekezdés teljes egészében, mert a kijelölés mindkettőt érinti.Jóslat ellenőrzése
3. Új bekezdés Enter után
Középre igazított bekezdés végén nyomsz egy Entert, és új szöveget írsz. Hogyan igazodik az új bekezdés? Általában az előző bekezdés igazítását örökli, tehát középre igazított lesz. Ha mást szeretnél, válaszd ki az új igazítást.Jóslat ellenőrzése
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. Nincs Justify
rtbDokumentum.SelectionAlignment = HorizontalAlignment.Justify;Hiba és javítás
Fordítási hiba (CS0117): a HorizontalAlignment felsorolásban nincs Justify. A sorkizárt igazítást a következő lecke külön megoldással éri el.
2. Rossz tulajdonság
rtbDokumentum.TextAlign = HorizontalAlignment.Center;
// CS1061: 'RichTextBox' does not contain a definition for 'TextAlign'Hiba és javítás
Fordítási hiba (CS1061): a RichTextBoxnak nincs TextAlign tulajdonsága (ez a sima TextBoxon van). A RichTextBoxnál a bekezdés igazítását a SelectionAlignment adja meg.
3. Nem a kijelölt szöveg igazodik
Kijelölsz egy szót, jobbra igazítasz, és az egész bekezdés elmozdul. Ez nem hiba: az igazítás mindig a teljes bekezdésre vonatkozik. Ha egy szót külön sorba szeretnél igazítani, tedd külön bekezdésbe Enterrel.Ok és javítás
4. Eltűnik a kijelölés
Az igazítógomb megnyomása után a kijelölt szöveg háttere eltűnik. A gomb átvette a fókuszt, és a RichTextBox elrejti a kijelölést. A 2.4 leckében tanult megoldás: állítsd a Ok és javítás
HideSelection tulajdonságot False-ra.
5. Elveszett az igazítás mentés után
Az igazítás nem látszik, miután elmentetted a dokumentumot TXT fájlként és megnyitottad. A TXT fájl csak nyers szöveget tartalmaz, formázást nem. Az igazítást az RTF fájl őrzi meg, ezért a mentésnél válaszd az RTF típust (2.3 lecke).Ok és javítás
Mini projekt: a MiniWord igazít
Add hozzá a három igazítógombot a MiniWordhöz. A kódot a leckében megírtad. Próbáld ki az egész formázó sávot együtt:
- Írj egy címet, és tedd középre, félkövérre és nagy méretűre.
- Írj alá egy dátumot, és igazítsd jobbra.
- Írj alá két bekezdést balra igazítva, és egy szót formázz dőltre.
- Mentsd el RTF fájlként, zárd be a programot, majd nyisd meg újra a fájlt.
- Nyisd meg a Wordben is, és nézd meg, hogy ott is ugyanígy látszik-e.
Mit tegyél ide: egy kész dokumentum a MiniWordben: középre igazított, félkövér cím, jobbra igazított dátum, alatta balra igazított bekezdések egy dőlt szóval.Javasolt fájlnév: winforms-2-6-miniword-dokumentum.webp · Alt szöveg: A MiniWord egy címmel, dátummal és két bekezdéssel, különböző igazításokkal
Önálló gyakorlófeladatok
Először készíts saját megoldást. A lenyitható rész csak ellenőrzéshez van.
1. Az aktuális igazítás kijelzése
Készíts egy A btnIgazitas gombot, amely egy üzenetablakban megmutatja, hogyan igazított a kurzor bekezdése.Egy lehetséges megoldás
private void btnIgazitas_Click(object sender, EventArgs e)
{
MessageBox.Show("Az igazítás: " + rtbDokumentum.SelectionAlignment.ToString());
}ToString() a felsorolás értékét szöveggé alakítja, például Left vagy Center.
2. Felsorolás kapcsoló
Készíts egy A leckében látott kód: btnFelsorolas gombot, amely a kijelölt bekezdéseken be- és kikapcsolja a felsorolásjelet.Egy lehetséges megoldás
rtbDokumentum.SelectionBullet = !rtbDokumentum.SelectionBullet;
3. Behúzás növelése
Készíts egy A régi értékhez hozzáadunk 20-at, így minden kattintás beljebb viszi a bekezdést.btnBehuzas gombot, amely minden megnyomáskor 20 képponttal növeli a bekezdés behúzását.Egy lehetséges megoldás
rtbDokumentum.SelectionIndent = rtbDokumentum.SelectionIndent + 20;
Gyakorlótár: 6 további feladat
Három szinten gyakorolhatsz: alap, közepes és kihívás. A feladatokhoz egy rtbDokumentum RichTextBox és a leírt gombok kellenek. Csak a próbálkozás után nyisd le a megoldást.
Alap szint
1. Három igazítás
A A btnBalra, btnKozep és btnJobbra gomb igazítsa a kurzor bekezdését (vagy a kijelölt bekezdéseket) balra, középre, illetve jobbra.Megoldás megnyitása
SelectionAlignment a kijelölt bekezdésre hat. A HorizontalAlignment három értéket ismer: Left, Center, Right.private void btnBalra_Click(object sender, EventArgs e)
{
rtbDokumentum.SelectionAlignment = HorizontalAlignment.Left;
rtbDokumentum.Focus();
}
private void btnKozep_Click(object sender, EventArgs e)
{
rtbDokumentum.SelectionAlignment = HorizontalAlignment.Center;
rtbDokumentum.Focus();
}
private void btnJobbra_Click(object sender, EventArgs e)
{
rtbDokumentum.SelectionAlignment = HorizontalAlignment.Right;
rtbDokumentum.Focus();
}
2. Felsorolás kapcsolása
A A btnFelsorolas gomb kapcsolja be vagy ki a kijelölt bekezdések felsorolásjelét.Megoldás megnyitása
SelectionBullet igaz/hamis érték. A ! (tagadás) megfordítja az aktuális állapotot.private void btnFelsorolas_Click(object sender, EventArgs e)
{
rtbDokumentum.SelectionBullet = !rtbDokumentum.SelectionBullet;
rtbDokumentum.Focus();
}
Közepes szint
3. Behúzás növelése és csökkentése
A A btnBehuz 20 képponttal növelje, a btnKiBehuz 20 képponttal csökkentse a kijelölt bekezdések behúzását. A behúzás ne lehessen negatív.Megoldás megnyitása
SelectionIndent a bekezdés bal behúzása képpontban. Negatív értéknél a program hibát jelezne, ezért a csökkentést Math.Max korlátozza.private void btnBehuz_Click(object sender, EventArgs e)
{
rtbDokumentum.SelectionIndent = rtbDokumentum.SelectionIndent + 20;
rtbDokumentum.Focus();
}
private void btnKiBehuz_Click(object sender, EventArgs e)
{
rtbDokumentum.SelectionIndent = Math.Max(0, rtbDokumentum.SelectionIndent - 20);
rtbDokumentum.Focus();
}
4. Az igazítás kijelzése
Egy A lblIgazitas felirat mutassa a kurzor bekezdésének igazítását: Igazítás: Center. A kurzor mozgatásakor is frissüljön.Megoldás megnyitása
SelectionChanged esemény a kurzor mozgásakor fut. A SelectionAlignment egy felsorolás értéke (Left, Center vagy Right), amelyet a szöveg összefűzése automatikusan szöveggé alakít. Próbáld ki különböző igazítású bekezdésekkel is, és figyeld meg, mit mutat vegyes kijelölésnél.private void rtbDokumentum_SelectionChanged(object sender, EventArgs e)
{
lblIgazitas.Text = "Igazítás: " + rtbDokumentum.SelectionAlignment;
}
Kihívás szint
5. Az egész dokumentum igazítása
A A btnMindKozep gomb az egész dokumentumot igazítsa középre, majd a kurzor kerüljön a szöveg elejére.Megoldás megnyitása
SelectAll() kijelöli az egész szöveget, az igazítás ráhat, a Select(0, 0) pedig megszünteti a kijelölést, és a kurzort az elejére teszi.private void btnMindKozep_Click(object sender, EventArgs e)
{
rtbDokumentum.SelectAll();
rtbDokumentum.SelectionAlignment = HorizontalAlignment.Center;
rtbDokumentum.Select(0, 0);
rtbDokumentum.Focus();
}
6. Cím és bekezdés egy gombbal
A Összetett formázás: három különböző tulajdonságot állítunk egyetlen kattintásra. Ha a bekezdés kijelölése nincs, a bekezdésformázás a kurzor bekezdésére vonatkozik, a betűformázás azonban csak a kijelölt szövegre.btnCim gomb a kurzor bekezdését középre igazítsa, és 24 pontos félkövér betűsre állítsa. A bekezdés behúzása legyen 0.Megoldás megnyitása
private void btnCim_Click(object sender, EventArgs e)
{
rtbDokumentum.SelectionAlignment = HorizontalAlignment.Center;
rtbDokumentum.SelectionIndent = 0;
rtbDokumentum.SelectionFont = new Font("Arial", 24, FontStyle.Bold);
rtbDokumentum.Focus();
}
Gyors önellenőrzés
Válaszolj fejben, és csak utána nyisd le a választ. Az a szövegrész, amely az egyik Enter-től a következőig tart. Az automatikus sortörés nem hoz létre új bekezdést. A A kijelölés által érintett összes bekezdés egészére, akkor is, ha csak egy részüket jelölted ki. Az RTF. A TXT csak nyers szöveget tárol.1. Mi számít bekezdésnek a RichTextBoxban?
2. Melyik tulajdonsággal igazítasz?
SelectionAlignment tulajdonsággal.3. Milyen értékeket vehet fel a HorizontalAlignment?
Left, Center és Right. A sorkizárt (Justify) nincs közte.4. Mire vonatkozik az igazítás?
5. Melyik fájlformátum őrzi meg az igazítást?
Mit tudsz már?
- Érted, mit jelent a bekezdés a RichTextBoxban.
- Balra, jobbra és középre igazítasz.
- Tudod, hogy a sorkizárt igazítás külön megoldást kér.
- Be- és kikapcsolod a felsorolást, és állítod a behúzást.
- Az RTF mentés megőrzi az igazítást.
Következő lecke: sorkizárt igazítás
A három alapigazítás kész. A következő leckében megoldjuk a sorkizárt igazítást is, a Windows saját szövegszerkesztő komponensének segítségével.





