【问题标题】:C# Spell checker ProblemC#拼写检查问题
【发布时间】:2011-02-15 13:53:35
【问题描述】:

我已将拼写检查合并到我的 win forms 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 然后隐藏窗口,只允许看到拼写检查器。请帮忙。

【问题讨论】:

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


    【解决方案1】:

    我尝试使用您的示例代码,但效果不佳,因此我尝试了MSDN's tutorial on the subject

    也就是说,我发现它是一个相当老套的解决方案。至于您的主要形式模糊不清,我想这是因为它在您处于拼写检查窗口时停止响应?您也许可以通过使用新线程来解决它。

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

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

    【讨论】:

    • 我也在寻找一个 WinForms 拼写检查器。我很好奇:你还在用 NetSpell 吗?一方面,您答案中的链接指向一篇已有近 10 年历史的文章(2003 年)。此外,该图像仅显示一个对话框。这是否意味着它无法在 RichTextBox 控件中显示那些红色波浪线?谢谢。
    【解决方案2】:

    我的工作和测试代码 sn-p 如下:

    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();
    

    使用错误文本的应用程序。

    Windows 将错误的单词显示为红色突出显示的文本。

    最后会显示错误总数。

    解决方案来自我的blog

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-10
      • 2011-02-02
      • 1970-01-01
      • 2018-10-22
      • 2011-07-08
      • 1970-01-01
      相关资源
      最近更新 更多