Grafikus C# – Windows Forms tanfolyam › 2.6 lecke

Windows Forms · 2.6 lecke

Bekezdésigazítás: balra, jobbra, középre

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.

  • kb. 40 perc
  • kezdő szint
  • SelectionAlignment
Diák C# programozást gyakorol egy tanulósarokban

A lecke végére

  • érted, mit jelent a bekezdés a RichTextBoxban;
  • a SelectionAlignment tulajdonsággal balra, jobbra és középre igazítasz;
  • ismered a HorizontalAlignment felsorolá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.

2.5 Betűtípus és betűméret →

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.

Nincs kijelölésAz igazítás a kurzort tartalmazó bekezdésre érvényes.
Kijelölés egy bekezdésen belülA teljes bekezdés igazodik, akkor is, ha csak egy szót jelöltél ki.
Kijelölés több bekezdésen átMinden érintett bekezdés igazodik, még akkor is, ha csak az egyik végét jelölted ki.
Új bekezdésEnter után a következő bekezdés általában örökli az előző igazítását.

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:

HorizontalAlignment.LeftBalra igazítás.
HorizontalAlignment.CenterKözépre igazítás.
HorizontalAlignment.RightJobbra igazítás.
Felsorolás (enum)Az értékek előre megadott lehetőségek közül választhatók. A FontStyle is ilyen volt a 2.4 leckében.
Form1.csC#
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:

btnBalraText: Balra
btnKozepText: Középre
btnJobbraText: Jobbra
Miért nem külön metódus?Itt mindhárom gomb egyetlen sort hajt végre, ezért nem érdemes külön metódust írni, mint a StilusValt esetében.
Form1.csC#
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();
}
📷 Képernyőkép helye

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:

SelectionBulletIgaz/hamis érték: true esetén a bekezdés elején felsorolásjel (pont) jelenik meg.
SelectionIndentEgész szám: a bekezdés behúzása a bal szélétől, képpontban (például 30).
Form1.csC#
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?

Jóslat ellenőrzése

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.

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?

Jóslat ellenőrzése

Mindkét bekezdés teljes egészében, mert a kijelölés mindkettőt érinti.

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?

Jóslat ellenőrzése

Á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.

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.

Ok és javítás

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.

4. Eltűnik a kijelölés

Az igazítógomb megnyomása után a kijelölt szöveg háttere eltűnik.

Ok és javítás

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 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.

Ok és javítás

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).

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:

  1. Írj egy címet, és tedd középre, félkövérre és nagy méretűre.
  2. Írj alá egy dátumot, és igazítsd jobbra.
  3. Írj alá két bekezdést balra igazítva, és egy szót formázz dőltre.
  4. Mentsd el RTF fájlként, zárd be a programot, majd nyisd meg újra a fájlt.
  5. Nyisd meg a Wordben is, és nézd meg, hogy ott is ugyanígy látszik-e.
📷 Képernyőkép helye

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 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());
}

A 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 btnFelsorolas gombot, amely a kijelölt bekezdéseken be- és kikapcsolja a felsorolásjelet.

Egy lehetséges megoldás

A leckében látott kód: rtbDokumentum.SelectionBullet = !rtbDokumentum.SelectionBullet;

3. Behúzás növelése

Készíts egy 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;

A régi értékhez hozzáadunk 20-at, így minden kattintás beljebb viszi a bekezdést.

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 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

A SelectionAlignment a kijelölt bekezdésre hat. A HorizontalAlignment három értéket ismer: Left, Center, Right.

Form1.csC#
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 btnFelsorolas gomb kapcsolja be vagy ki a kijelölt bekezdések felsorolásjelét.

Megoldás megnyitása

A SelectionBullet igaz/hamis érték. A ! (tagadás) megfordítja az aktuális állapotot.

Form1.csC#
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 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

A 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.

Form1.csC#
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 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

A 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.

Form1.csC#
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 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

A 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.

Form1.csC#
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 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

Ö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.

Form1.csC#
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.

1. Mi számít bekezdésnek a RichTextBoxban?

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.

2. Melyik tulajdonsággal igazítasz?

A 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?

A kijelölés által érintett összes bekezdés egészére, akkor is, ha csak egy részüket jelölted ki.

5. Melyik fájlformátum őrzi meg az igazítást?

Az RTF. A TXT csak nyers szöveget tárol.

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.