WPF RichTextBox - получить целое слово в текущей позиции каретки - PullRequest
2 голосов
/ 14 октября 2010

Я включил орфографию на своем WPF richtextbox и хочу получить слово с ошибкой в ​​текущей позиции каретки до отображения контекстного меню с предложениями по написанию.

Ответы [ 4 ]

4 голосов
/ 21 апреля 2011

Новый путь

    void richTextBox1_PreviewKeyDown(object sender, KeyEventArgs e)
    {
        if (e.Key == Key.Back)
        {
            TextPointer start = richTextBox1.CaretPosition;
            string text1 = start.GetTextInRun(LogicalDirection.Backward);
            TextPointer end = start.GetNextContextPosition(LogicalDirection.Backward);
            string text2 = end.GetTextInRun(LogicalDirection.Backward);

            richTextBox1.Selection.Select(start, end);
            richTextBox1.Selection.ApplyPropertyValue(TextElement.ForegroundProperty, Brushes.Black);
            richTextBox1.Selection.Select(start, start);
            //e.Handled = true;
        }
    }
1 голос
/ 22 февраля 2015

Для дальнейшего использования:

void richTextBox1_PreviewKeyDown(object sender, KeyEventArgs e)
{
   var rtb = (RichTextBox)sender;
   var tr = rtb.GetSpellingErrorRange(rtb.CaretPosition);
   if(tr != null)
   {
       string spellingerror = tr.Text;
       //Do whatever
   }
}
1 голос
/ 21 апреля 2011

Старый способ

    private void richTextBox1_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Back)
        {
            var z = this.richTextBox1.SelectionStart;
            var r = richTextBox1.Find(" ", 0, z, RichTextBoxFinds.None | RichTextBoxFinds.Reverse);
            var q = this.richTextBox1.Text.Substring(r + 1, z - r - 1);
            switch (q)
            {
                case "test":
                    this.richTextBox1.SelectionStart = r + 1;
                    this.richTextBox1.SelectionLength = z - r - 1;
                    this.richTextBox1.SelectionColor = Color.Black;
                    this.richTextBox1.SelectionStart += this.richTextBox1.SelectionLength;
                    this.richTextBox1.SelectionLength = 0;
                    //e.Handled = true;
                    break;
                default:
                    this.richTextBox1.SelectionStart = z;
                    break;
            }
        }
    }
1 голос
/ 14 октября 2010

Проверьте это http://www.dotnetfunda.com/articles/article842-spellchecker-in-wpf-.aspx

Прямо здесь, кажется, обсуждаются некоторые варианты, которые могут помочь вашему сценарию: «Здесь мы используем класс SpellingError для получения предложений. CaretIndex возвращает индекс, в котором карат находится в текстовом поле. GetSpellingError может возвращать объект SpellingError только тогда, когда в текущем местоположении карата есть слово с ошибками, а также SpellCheck включен для TextBox».

...