C# - Szövegekben megadott törtszámok megjelenítése szabályosan

forráskód letöltése
A szövegszerkesztő alkalmazásokban minden nehézség nélkül használhatjuk a törteket, hiszen szabályos formában jelennek meg, akár nyomtatásban is. Az ehhez kapcsolódó támogatást nem tudjuk felhasználni alkalmazásainkban, mert nincsenek megjelenítő metódusok. Cikkünkben elkészítünk egy osztályt, melynek segítségével képesek vagyunk ezt a hiányosságot a karakterláncok megjelenítésekor kiküszöbölni.
A mellékelt projekt DrawerClass osztályának statikus DrawFraction metódusával tudunk majd törteket is szabályosan megjeleníteni a szövegben. A példa Form-ján meg kell adnunk egy szöveget, mely szám/szám formátumban tartalmazza a törtet, és egy színt, majd a MŰVELET gombbal megjelenítjük a szöveget helyesen.
A DrawFraction metódus paraméterei a következők:
  • text: a törtet tartalmazó karakterlánc
  • f: a szöveg megjelenítéséhez használható Font
  • c: a szöveg színe
  • x, y: a szöveg relatív koordinátája
  • g: a rajzoláshoz szükséges Graphics objektum
A metódusban elsőként meghatározzuk, hogy hány darab „/” karakter található a szövegben. A karakterek pozícióját egy ArrayList tömbben helyezzük el.
ArrayList positions = new ArrayList();
for(int i=0;i<text.Length;i++)
{
  if (text[i].ToString() == "/")
  {
    positions.Add(i);
  }
}
A függvény ezt követően meghívja a három segédmetódust, melyek feladatát a következőkben foglaljuk össze.
GetPosesArray metódus
A szövegben a „/” karakter előtt és után megtalálható számok lesznek szignifikánsak a tört szempontjából. Ezeket úgy határozzuk meg, hogy végzünk egy keresést a „/” karakter előtt és után addig, amíg számot találunk.
A karakter előtt és után megtalálható számok számáról és pozíciójáról kapott adatokat eltároljuk egy-egy tömbben, melyeket egy ArrayList objektumban helyezünk el.
GetStringArray metódus
A szöveg annak megfelelően, hogy egy adott része tört formájában felírható karakterlánc-e vagy sem, több részre tagolható. A metódusban ezt a tagolást végezzük el.
A metódusnak paraméterként adjuk át a szöveg egészét, valamint az előző metódusban létrehozott tömböt. A tömb információinak felhasználásával a karakterláncok mindegyikét egy ArrayList objektumban helyezzük el, melyet a metódus visszaad.
Drawing metódus
A harmadik, és egyben legfontosabb metódus a Drawing, melyben a megjelenítést végezzük el. A metódusban a fent létrehozott szakasztömböt használjuk fel. A karakterlánc-szakaszok mindegyikét a Graphics objektum DrawString metódusával rajzoljuk ki, csak a törtet nem tartalmazó karakterláncokat egy, míg a törteket három részletben.
A szakaszok mindegyike egy-egy Rectangle objektumban, mint befoglaló téglalapban adható meg, melyek mérete és pozíciója az előző szakasz téglalapjához igazodik.
A befoglaló téglalap magasságméretét a karakterlánc számára megadott betűmérethez igazítjuk. A törtek megjelenítése is ezen alapszik, csak az egyes számjegyek mérete a karakterlánc betűméretének felével lesz egyenlő.
A kirajzolás fizikailag úgy történik, hogy a DrawString metódusokkal kirajzoljuk a számjegyeket egymás fölé, közéjük pedig egy vízszintes egyenest húzunk.
...
g.DrawString(array[0],ff,new SolidBrush(c),small_r.X,small_r.Y);
g.DrawLine(new Pen(c),small_r.X+1,small_r.Y + small_r.Height/2,small_r.Right-1,small_r.Y + small_r.Height/2);
g.DrawString(array[1],ff,new SolidBrush(c),small_r.X,small_r.Bottom - ss.Height);
Az alkalmazás Form-ján egy színt is meg kell adnunk, melyet egy ColorDialog ablakban választhatunk ki.