TX Spell .NET for Windows Forms

Open the Spell Check Dialog

Topic

The spell check dialog of TX Spell .NET works with any control, not only with TX Text Control. For a RichTextBox, the dialog walks through the misspelled words and the user picks a correction, while a short event handler writes each correction back into the control. You add this to the application of Check Spelling as You Type.

Prerequisites

  • The application of Check Spelling as You Type: a form with a RichTextBox called richTextBox1 and a TXSpellChecker called txSpellChecker1, in a project with the package TXTextControl.TXSpell.WinForms.SDK.

How the Dialog Works With a RichTextBox

A RichTextBox knows nothing about the spell checker, so the work is split in two:

  1. Your code passes the text to Check. The spell checker finds the incorrect words and keeps them in IncorrectWords.
  2. Show opens the dialog with these words. Each time the user changes or deletes a word, the spell checker raises IncorrectWordChanging, and your handler makes the same change in the RichTextBox.

Add the Button

  1. Open Form1 in the designer. Select richTextBox1 and set its Dock property to None, so that there is room for a button, and make it a little smaller.
  2. Draw a Button from the Common Controls tab onto the form. Set its Text to Spell Check Dialog... and its (Name) to buttonSpelling.
  3. Double-click the button. Visual Studio creates the handler buttonSpelling_Click.
  4. Select txSpellChecker1 in the component tray, click the Events button of the Properties window and double-click IncorrectWordChanging. Visual Studio creates the handler txSpellChecker1_IncorrectWordChanging.

Write the Code

Add the code to the two handlers in Form1.cs:

private void buttonSpelling_Click(object sender, EventArgs e)
{
    // Find the incorrect words, then walk through them in the dialog
    txSpellChecker1.Check(richTextBox1.Text);
    txSpellChecker1.SpellCheckDialog.Show();
}

private void txSpellChecker1_IncorrectWordChanging(object sender, IncorrectWordChangingEventArgs e)
{
    // Keep the TextChanged handler from checking while the dialog is open
    isColoring = true;

    // Select the word the user is changing
    richTextBox1.Select(e.IncorrectWord.Start, e.IncorrectWord.Length);

    if (e.Type == TXSpell.ChangeType.Replace)
    {
        richTextBox1.SelectedText = e.CorrectedWord;
    }
    else if (e.Type == TXSpell.ChangeType.Delete)
    {
        richTextBox1.SelectedText = "";
    }

    isColoring = false;
}

What the Code Does

  • SpellCheckDialog returns the dialog of the spell checker. Show() without arguments opens it with the words of the last Check.
  • Type says what the user did: Replace, Delete or Ignore, values of TXSpell.ChangeType. An ignored word needs no change in the text.
  • IncorrectWord is the word being changed, with its position in the text.
  • CorrectedWord is the suggestion the user chose. Read it only when Type is Replace: for other types, it throws an exception.
  • isColoring is the flag of the TextChanged handler from Check Spelling as You Type. Changing the text raises TextChanged, and the handler would call Check while the dialog is open, which throws an exception. The flag makes the handler skip these changes; the colors are updated again when the user types.

The code uses IncorrectWordChangingEventArgs and TXSpell from the TXTextControl.Proofing namespace, which the using directive of Form1.cs already imports.

Run the Application

Press F5, type a sentence with a few mistakes, and click Spell Check Dialog.... The dialog opens with the first misspelled word in its sentence:

The Spelling dialog over a RichTextBox: the sentence with the misspelled word "sampke" in red, the language line "No language set", the suggestions sample, spake, smoke, samples, sampler and sampled, and the buttons Ignore Once, Ignore All, Add To Dictionary, Change, Change All, Options and Cancel.

Select a suggestion and click Change: the word is replaced in the RichTextBox, and the dialog moves on to the next one. Ignore Once and Ignore All skip words, and Cancel ends the check. The dialog shows "No language set" because the text of a RichTextBox carries no language information.

Offer Suggestions in the Context Menu

The same words can also be corrected with a right-click. The GetMenuItems method returns ready-made menu items for an incorrect word, with suggestions and the commands of the dialog, to put into a ContextMenuStrip:

The context menu of a misspelled word in a RichTextBox, with five suggestions, Ignore, Ignore All, Add To Dictionary, Spell Check Dialog and Options.

Context Menus builds this menu step by step.

Next Steps