2010-05-04 130 views
1

我已经将拼写检查合并到了我的win窗体C#项目中。这是我的代码。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()); 
    } 
} 

拼写检查效果很好,唯一的问题是,当我尝试检查的主要形式因为某些原因模糊了移动的咒语。另外,当我关闭拼写检查器时,主窗体恢复正常。它似乎是打开微软的话,然后隐藏窗口,只允许看到拼写检查器。请帮忙。

回答

1

我试过使用你的示例代码,它不能正常工作,所以我尝试了MSDN's tutorial on the subject

这就是说,我觉得这是一个相当黑客的解决方案。至于你的主要表格模糊起来,我想这是因为它停止响应,而你在拼写检查窗口?您可以通过使用新线程来解决它。

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

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

+0

我也在寻找一个WinForms拼写检查器。我很好奇:你还在使用NetSpell吗?首先,答案中的链接指向一篇近10年的文章(2003年)。此外,图像只显示一个对话框。这是否意味着它无法在RichTextBox控件中显示这些红色波浪线?谢谢。 – 2011-04-20 16:48:32

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拍摄。