Я включил орфографию в своем расширенном текстовом поле WPF и хочу получить слово с ошибкой в текущей позиции каретки, прежде чем отобразится контекстное меню с предложениями по правописанию.
WPF RichTextBox – получить целое слово в текущей позиции каретки
Ответы (4)
Новый способ
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;
}
}
person
Subhash Lama
schedule
21.04.2011
Проверьте это http://www.dotnetfunda.com/articles/article842-spellchecker-in-wpf-.aspx
Прямо здесь, кажется, обсуждаются некоторые варианты, которые могут помочь вашему сценарию: «Здесь мы используем класс SpellingError для получения предложений. CaretIndex возвращает индекс, где карат находится в текстовом поле. GetSpellingError может возвращать объект SpellingError только тогда, когда текущее местоположение Carat имеет слово с ошибками, а также включена проверка орфографии для TextBox».
person
halfevil
schedule
14.10.2010
По-старому
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;
}
}
}
person
Subhash Lama
schedule
21.04.2011
Для дальнейшего использования:
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
}
}
person
SILENT
schedule
22.02.2015
tr
? Возможно, правильное полное имя переменных может помочь другим, пришедшим сюда в поисках ответов.
- person superjos; 05.06.2016