C#拼写检查问题

时间:2010-05-04 17:10:38

标签: c# winforms c#-3.0 ms-word spell-checking

我已将拼写检查合并到我的win form 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());
    }
}

拼写检查工作得很好,唯一的问题是当我尝试移动拼写检查器时,由于某种原因,主表单会模糊不清。此外,当我关闭拼写检查时,主窗体恢复正常。看起来它正在打开微软的话然后隐藏窗口,只允许看到拼写检查器。请帮忙。

2 个答案:

答案 0 :(得分:1)

我尝试使用您的示例代码,但它没有成功,所以我尝试了MSDN's tutorial on the subject

那就是说,我认为这是一个相当狡猾的解决方案。关于你的主要形式模糊,我想这是因为它在你的拼写检查窗口时停止响应?您可以通过使用新线程来绕过它。

另外,你是对的,它正在启动MS Word,然后隐藏窗口。

就个人而言,我宁愿使用像NetSpell这样的库而不是依赖Office。

答案 1 :(得分:0)

我的工作和测试代码段如下:

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

解决方案来自我的blog