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