如何才能使“替换文本”代码生效?

时间:2013-04-28 10:17:11

标签: c# .net winforms

我在我的应用程序中使用NetSpell以提供拼写检查。一切都禁止NetSpell的一个功能正常工作。这是“替换单词”功能(而不是拼写检查程序中的一个重要功能,是吗?)。

代码如下:

private NetSpell.SpellChecker.Spelling spelling;
    private NetSpell.SpellChecker.Dictionary.WordDictionary wordDictionary;
    internal System.Windows.Forms.Button spellButton;
    internal System.Windows.Forms.RichTextBox demoRichText;
    private System.ComponentModel.IContainer components2;
    internal System.Windows.Forms.RichTextBox Document;
    internal NetSpell.SpellChecker.Spelling SpellChecker;
    private System.ComponentModel.IContainer components1;
    internal NetSpell.SpellChecker.Dictionary.WordDictionary WordDictionary;

启动拼写检查:

 private void toolStripButton1_Click(object sender, EventArgs e)
    {
        try
        {
            if (richTextBoxPrintCtrl1.Text == null)
            {
                MessageBox.Show("There is no text to check. Spellcheck will not be launched", "No Text", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }
            else
            {
                this.spelling1.Text = this.richTextBoxPrintCtrl1.Text;
                this.spelling1.SpellCheck();
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show("Error loading Spell Checker. Please reload application and try again. " + ex.Message, "Error!", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
    }

替换Word:

 private void spelling_ReplacedWord(object sender, NetSpell.SpellChecker.ReplaceWordEventArgs e)
        {
            int start = this.richTextBoxPrintCtrl1.SelectionStart;
            int length = this.richTextBoxPrintCtrl1.SelectionLength;

            this.richTextBoxPrintCtrl1.Select(e.TextIndex, e.Word.Length);
            this.richTextBoxPrintCtrl1.SelectedText = e.ReplacementWord;

            if (start > this.richTextBoxPrintCtrl1.Text.Length)
                start = this.richTextBoxPrintCtrl1.Text.Length;

            if ((start + length) > this.richTextBoxPrintCtrl1.Text.Length)
                length = 0;

            this.richTextBoxPrintCtrl1.Select(start, length);
        }

删除Word:

private void spelling_DeletedWord(object sender, NetSpell.SpellChecker.SpellingEventArgs e)
    {
        int start = this.richTextBoxPrintCtrl1.SelectionStart;
        int length = this.richTextBoxPrintCtrl1.SelectionLength;

        this.richTextBoxPrintCtrl1.Select(e.TextIndex, e.Word.Length);
        this.richTextBoxPrintCtrl1.SelectedText = "";

        if (start > this.richTextBoxPrintCtrl1.Text.Length)
            start = this.richTextBoxPrintCtrl1.Text.Length;

        if ((start + length) > this.richTextBoxPrintCtrl1.Text.Length)
            length = 0;

        this.richTextBoxPrintCtrl1.Select(start, length);
    }

我现在被问到问题所在。有人能指点我正确的方向吗?

感谢。

- 编辑 -

我添加了拼写检查功能使用的所有代码。我很抱歉,如果这是不正确的,但我是编程的新手,我仍然不完全理解所有的技术术语,所以我只是尽我所能来帮助你。 :O)

- 编辑2 -

我发现了更多。 “替换所有”功能在一定程度上起作用。如果我更改单词并按“全部替换”,它会在拼写检查中更改它,但不会在表单上更改它。请参阅以下图片。

Before word is replaced

Once word has been replaced (using Replace All)

Still not changed!

1 个答案:

答案 0 :(得分:0)

我自己创建了这两个函数并对它们进行了测试。他们在工作。您可以从事件处理程序中调用它们。

static public class RichTextBoxExtensions
{
    static public void ReplaceWord(this RichTextBox rtb, int index, int length, string newWord)
    {
        rtb.Select(index, length);
        rtb.SelectedText = newWord;
        rtb.Select(index, newWord.Length);
    }

    static public void ReplaceWord(this RichTextBox rtb, string oldWord, string newWord)
    {
        rtb.ReplaceWord(rtb.Text.IndexOf(oldWord), oldWord.Length, newWord);
    }

}