C # Проверка правописания Проблема - PullRequest
1 голос
/ 04 мая 2010

Я включил проверку орфографии в свой проект Win C #. Это мой код.

public void CheckSpelling()
{
    try
    {
        // declare local variables to track error count 
        // and information
        int SpellingErrors = 0;
        string ErrorCountMessage = string.Empty;

        // create an instance of a word application
        Microsoft.Office.Interop.Word.Application WordApp =
            new Microsoft.Office.Interop.Word.Application();

        // hide the MS Word document during the spellcheck
        //WordApp.WindowState = WdWindowState.wdWindowStateMinimize;


        // check for zero length content in text area
        if (this.Text.Length > 0)
        {
            WordApp.Visible = false;

            // create an instance of a word document
            _Document WordDoc = WordApp.Documents.Add(ref emptyItem,
                                              ref emptyItem,
                                              ref emptyItem,
                                              ref oFalse);

            // load the content written into the word doc
            WordDoc.Words.First.InsertBefore(this.Text);

            // collect errors form new temporary document set to contain
            // the content of this control
            Microsoft.Office.Interop.Word.ProofreadingErrors docErrors = WordDoc.SpellingErrors;
            SpellingErrors = docErrors.Count;

            // execute spell check; assumes no custom dictionaries
            WordDoc.CheckSpelling(ref oNothing, ref oIgnoreUpperCase, ref oAlwaysSuggest,
                ref oNothing, ref oNothing, ref oNothing, ref oNothing, ref oNothing,
                ref oNothing, ref oNothing, ref oNothing, ref oNothing);

            // format a string to contain a report of the errors detected
            ErrorCountMessage = "Spell check complete; errors detected: " + SpellingErrors;

            // return corrected text to control's text area
            object first = 0;
            object last = WordDoc.Characters.Count - 1;
            this.Text = WordDoc.Range(ref first, ref last).Text;
        }
        else
        {
            // if nothing was typed into the control, abort and inform user
            ErrorCountMessage = "Unable to spell check an empty text box.";
        }

        WordApp.Quit(ref oFalse, ref emptyItem, ref emptyItem);
        System.Runtime.InteropServices.Marshal.ReleaseComObject(WordApp);

        // return report on errors corrected
        // - could either display from the control or change this to 
        // - return a string which the caller could use as desired.
       // MessageBox.Show(ErrorCountMessage, "Finished Spelling Check");
    }
    catch (Exception e)
    {
        MessageBox.Show(e.ToString());
    }
}

Проверка орфографии работает хорошо, единственная проблема в том, что когда я пытаюсь переместить проверку орфографии, основная форма по какой-то причине расплывается. Также, когда я закрываю проверку орфографии, основная форма возвращается к нормальной жизни. Кажется, что он открывает Microsoft word, а затем скрывает окно, позволяя видеть только средство проверки правописания. Пожалуйста, помогите.

Ответы [ 2 ]

1 голос
/ 05 мая 2010

Я попытался использовать ваш пример кода, и он не сработал так, как следовало бы, поэтому я попробовал учебник MSDN по теме .

Тем не менее, я считаю это довольно хакерским решением. Что касается размывания вашей основной формы, я думаю, это потому, что она перестает отвечать, когда вы находитесь в окне проверки орфографии? Возможно, вы сможете обойти это, используя новую тему.

Кроме того, вы правы, он запускает MS Word, а затем скрывает окно.

Лично я предпочел бы использовать такую ​​библиотеку, как NetSpell , а не полагаться на Office.

0 голосов
/ 12 августа 2015

Мой рабочий и проверенный фрагмент кода выглядит следующим образом:

string s1 = textBox1.Text;

Microsoft.Office.Interop.Word.Application app = new Microsoft.Office.Interop.Word.Application();

Microsoft.Office.Interop.Word._Document doc = app.Documents.Add();

doc.Words.First.InsertBefore(s1);

Microsoft.Office.Interop.Word.ProofreadingErrors errors = doc.SpellingErrors;

int errorCount = errors.Count;

doc.CheckSpelling(Missing.Value, true, false);

app.Quit(false);

textBox3.Text = errorCount.ToString();

Приложение с неверным текстом.

Application with wrong text

Windows показывает неправильное слово в виде выделенного красным цветом текста.

Word plugin checking word spells

В конце отображается общее количество ошибок.

Application showing total number of errors

Решение взято из моего блога .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...