AutoCorrect Feature
- 5 minutes to read
The RichEditControl AutoCorrect feature can help you automate inserting frequently used text, auto-correcting typing errors and misspelled capitalization. You can specify the built-in options construct a custom replacement table or handle the Autocorrect event to analyze the input text and provide the necessary substitution.
Built-in Automatic Correction Options
The following members enable you to enable certain automatic correction features:
Property | Description |
---|---|
AutoCorrectOptions.DetectUrls | Automatically detects an inserted web address, a network path or email address and converts it to a hyperlink. |
AutoCorrectOptions.CorrectTwoInitialCapitals | Corrects capitalization errors. |
AutoCorrectOptions.ReplaceTextAsYouType | Scans for entries as you type and replaces them with the designated text or image. |
AutoCorrectOptions.UseSpellCheckerSuggestions | Automatically detects and corrects typos and misspelled word if the RichEditControl.SpellChecker property specifies a spell checker component. If the spell checker provides one suggestion, this suggestion automatically substitutes the incorrect word. Otherwise, no changes are made. |
Use the richEditControl.Options.AutoCorrect notation to access the built-in autocorrect options, as shown in the code snippet below:
AutoCorrectOptions correctionOptions = richEditControl1.Options.AutoCorrect;
correctionOptions.CorrectTwoInitialCapitals = true;
correctionOptions.DetectUrls = false;
correctionOptions.ReplaceTextAsYouType = true;
correctionOptions.UseSpellCheckerSuggestions = true;
Automatic Correction Using Table Entries
The text expander functionality allows you to insert symbols, decipher abbreviations and insert images. Follow the steps below to implement the text expander:
Create a new AutoCorrectReplaceInfoCollection instance and fill it with AutoCorrectReplaceInfo entries:
private AutoCorrectReplaceInfoCollection LoadAbbrevs(string path)
{
AutoCorrectReplaceInfoCollection coll = new AutoCorrectReplaceInfoCollection();
string aLine = "";
AutoCorrectReplaceInfo acrInfoIm = new AutoCorrectReplaceInfo(":-)", CreateImageFromResx("smile.png"));
coll.Add(acrInfoIm);
if (File.Exists(path))
{
StreamReader sr = new StreamReader(path);
while (!(sr.EndOfStream))
{
aLine = sr.ReadLine();
if (aLine != "START") continue;
while (!(sr.EndOfStream))
{
aLine = sr.ReadLine();
aLine = aLine.Trim();
string[] words = aLine.Split('=');
if (words.Length == 2)
{
AutoCorrectReplaceInfo acrInfo = new AutoCorrectReplaceInfo(words[0], words[1]);
coll.Add(acrInfo);
}
}
}
sr.Close();
}
return coll;
}
Call the IAutoCorrectService.SetReplaceTable method to register a created replacement list. Register the service after the RichEditControl instance is completely loaded, i.e. in the Form.Loaded event handler.
IAutoCorrectService svc = richEditControl1.GetService<IAutoCorrectService>();
if (svc != null)
svc.SetReplaceTable(LoadAbbrevs("abbvs.txt"));
When you type a space, punctuation mark or carriage return (a character that typically means you have finished typing a word), AutoCorrect compares the word (or more precisely the group of characters) against its list of entries. If the word matches an entry, AutoCorrect substitutes this word with a replacement object.
In this example, the substitution is performed as shown in the animation below:
Automatic Correction Using the AutoCorrect Event
Handle the RichEditControl.AutoCorrect event to analyze the input text and provide a specific object for replacement. Use the following API (accessible using the AutoCorrectEventArgs.AutoCorrectInfo property) to perform the desired actions:
API | Description |
---|---|
AutoCorrectInfo.Text | Gets the input string to check whether it should be replaced. |
AutoCorrectInfo.IncrementStartPosition | Decreases a text range being analyzed by moving its start by one position. |
AutoCorrectInfo.DecrementStartPosition | Extends a text range being analyzed by moving its start by one position. |
AutoCorrectInfo.IncrementEndPosition | Extends a text range being analyzed by moving its end by one position. |
AutoCorrectInfo.DecrementEndPosition | Decreases a text range being analyzed by moving its end by one position. |
AutoCorrectInfo.ReplaceWith | Gets or sets the object used to replace the input string in the document. |
The following code sample shows how to handle the RichEditControl.AutoCorrect event to replace the typed $ symbol with a picture of a dollar, and substitute the text enclosed in percent symbols with custom content.
private void richEditControl1_AutoCorrect(object sender, DevExpress.XtraRichEdit.AutoCorrectEventArgs e)
{
AutoCorrectInfo info = e.AutoCorrectInfo;
e.AutoCorrectInfo = null;
if (info.Text.Length <= 0)
return;
//Find a dollar and the percent sign in the obtained text
for (; ; )
{
if (!info.DecrementStartPosition())
return;
if (IsSeparator(info.Text[0]))
return;
if (info.Text[0] == '$')
{
//Replace the dollar sign with an image
info.ReplaceWith = CreateImageFromResx("dollar_pic.png");
e.AutoCorrectInfo = info;
return;
}
if (info.Text[0] == '%')
{
//Replace a text between dollar signs with a custom content
string replaceString = CalculateFunction(info.Text);
if (!String.IsNullOrEmpty(replaceString))
{
info.ReplaceWith = replaceString;
e.AutoCorrectInfo = info;
}
return;
}
}
}