HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Helyesírás ellenőrzése saját alkalmazásban


Példaprogram letöltése

11650 bájt

Ha azon a gépen telepített az MS Word, melyen saját alkalmazásunk is fut, akkor a programunkban felhasználhatjuk a Word helyesírás ellenőrzőjét anélkül, hogy a felhasználó észrevenné, hogy a Word dolgozik a háttérben. A megoldás eredménye az lesz, hogy a felhasználó észre sem veszi, hogy ténylegesen nem is a mi alkalmazásunk ellenőrzi a helyesírást, mely akár egy TextBox-ban lévő szövegre is futhat. A helyesírás ellenőrzése közben, ha hibás szót talál a Word, akkor ennek javítását is saját programunkban oldhatjuk meg úgy, hogy a Word által javasolt szavakat megjelenítjük a felhasználónak, hogy válassza ki, hogy melyikre cseréjük ki a hibás szót.

A feladat a következő: a textBox1-ben lévő szövegnek a helyességét szeretnénk ellenőrizni. Ha vannak benne hibás szavak - márpedig tettünk bele -, akkor ezek javítása után a helyes szöveg a textBox2-ben jelenjen meg. Az egész művelet elvégzéséhez létrehoztunk egy CheckString nevű függvényt.
    private void button1_Click(object sender, System.EventArgs e)
    {
      textBox2.Text=CheckString(textBox1.Text);
    }
A CheckString függvényben a következőképpen vizsgáljuk a sztringet: ahhoz, hogy a Word elvégezhesse a vizsgálatot, a kapott sztringet szavakra kell bontanunk. A Word minden egyes szót megvizsgál és ha hibásnak találja, akkor ezt jelzi. Hibás szó esetén kapunk a Word-től egy listát, melyben azokat a szavakat adja meg, melyekre a hibás szó cserélhető. Ekkor megjelenítünk egy másik Form-ot a felhasználónak, hogy ebből a listából választhasson.
    private string CheckString(string Str)
    {
      string w="";
      string result="";
      bool b=false;
A szavakra történő bontást úgy végezzük el, hogy karakterenként végigmegyünk a kapott sztringen, hogy az eredménybe is bekerüljön a szöveg összes karaktere. Ha egy olyan karakter találunk, mely nem szám és nem betű, akkor tudhatjuk, hogy az aktuális szónak vége, lehet ellenőriztetni. Ha nem így lenne, akkor még tart a szó, így az aktuális karaktert is eltároljuk a w nevű sztring típusú változóba.
      foreach (char c in Str)
      {
        if (Char.IsLetterOrDigit(c))
        {
          w+=c;
          b=false;
        }
        else
        {
          if (!b)
          {
Ha megtaláltuk a következő szót, akkor meghívjuk a CheckWord nevű belső függvényünket, mely elvégezteti a Word-el az aktuális szó vizsgálatát. Ha ez szó helyes, akkor igaz értékkel tér vissza, így a szót tárolhatjuk az eredményben.
            if (CheckWord(w))
            {
              result+=w;
            }
            else
            {
Abba az esetben, ha az aktuális szó hibás, akkor megjelenítjük a második Form-unkat, melyen a felhasználó választhat egy helyes szót a hibás helyett. A hibás szót, illetve a jó szavak listáját a Form-nak a ReplaceWord függvényen keresztül adjuk át, majd ShowDialog függvénnyel megjelenítjük.
              f.ReplaceWord(w, wordlist);
              if (f.ShowDialog()==DialogResult.OK)
              {
Ha a felhasználó úgy döntött, hogy a hibás szót cseréli egy másikra, akkor az eredményhez a felhasználó által választott szót adjuk hozzá, melyet a Form NewWord property-jén keresztül érünk el.
                result+=f.NewWord;
              }
              else
              {
Ha a felhasználó nem akarja cserélni a szót, akkor az eredményhez a Word szerint hibás szót adjuk hozzá.
                result+=w;
              }
            }
            b=true;
          }
Hogy a szöveg írásjelei se vesszenek el az eredményből, minden ilyen típusú karaktert is hozzá kell adnunk az eredményhez.
          result+=c;
          w="";
        }         
      }
Miután a ciklusunk végigment a kapott szöveg összes karakterén, addigra a result változónkba került a már javított szöveg, így a függvényünk ezzel az értékkel térhet vissza.
      return result;
    }
Nézzük most, miként ellenőriztethetünk a Word-el egy-egy szót. Ehhez készítettük a CheckWord függvényt. Mire a programunk futása ide ér, már létező kapcsolattal kell rendelkeznünk a Word-höz. A helyesírás nem működik, ha nincs megnyitott dokumentum, ezért a Word létrehozása után nyitunk egy új üres dokumentumot. Mivel a Word alkalmazás Visible property-ét nem állítottuk igazra, így maga a Word nem jelenik meg, az a felhasználó által láthatatlan marad. Ezzel biztosítjuk azt, hogy a felhasználó észre sem veszi, hogy a háttérben a Word-öt használtuk a helyesírás ellenőrzésére.
Az adott szó helyességének ellenőrzésére a CheckSpelling függvény alkalmas. Az ellenőrizendő szót kell megadni az első paraméterben. Ha a függvény visszatérési értéke hamis, akkor a szó hibás.
    private bool CheckWord(string word)
    {
      if (!wa.CheckSpelling(word, ...))
      {
Hibás szó esetében a GetSpellingSuggestions függvény hívásával kérünk egy listát azokról a szavakról, melyek megfelelnének a hibás helyett.
        Word.SpellingSuggestions ss = wa.GetSpellingSuggestions(word, ...);
A kapott SpellingSuggestions osztály elemein egy ciklussal megyünk végig és sorban kiolvassuk a szavakat, majd tároljuk egy sztringeket tartalmazó tömbbe.
        wordlist = new string[ss.Count];
        for (int i=1; i<=ss.Count; i++)
        {
          wordlist[i-1]=ss.Item(i).Name;
        }
        ...
    }
Form2
Hibás szó esetén kerül megjelenítésre a Form2, melyben egy listát kell mutatnunk a felhasználónak, amelyben a hibás szó helyett ajánlott szavak láthatók.
A Form2 ReplaceWord függvényén keresztül kapjuk meg ezt a listát, melyet egy rendezett ListBox-ba töltünk. Ha a felhasználó választ ebből a listából és a Csere gombra kattint, akkor a newWord sztring típusú változóba kerül a választott szó. Ennek tartalmát a NewWord property-n keresztül lehet majd kiolvasni.
Ha a felhasználó a Mégsem gombra kattint, akkor a hibás szó nem lesz kicserélve, hanem változatlan formában bekerül az eredménybe.
Mindkét gomb esetén bezárjuk a Form-ot a Close függvény hívásával. A Form megjelenítésekor azonban el kell döntenünk, hogy melyik gombbal is történt a bezárás, hogy tudjuk kell-e cserélni az adott szót. Ezt úgy oldjuk meg, hogy a Csere gomb esetén a DialogResult property értékét OK-ra állítjuk, míg a Mégsem gombnál itt a Cancel értéket választjuk.



Könyv
Ez a cikk megtalálható ebben a könyvben: C# Software Offline 2002 évkönyv 319. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |