Как получить один текст абзаца из richtextbox при двойном щелчке по нему - PullRequest
2 голосов
/ 17 сентября 2009

У меня возникли проблемы с получением контроля над элементом управления WPF richtextbox.

Я хочу следующее: У меня есть элемент управления RichTextBox с именем richTextBox1, который я заполнил данными из базы данных.

Мне нужно получить текст в одну строку (имеется в виду один абзац), когда я нажимаю на элемент управления.

Все, что я нашел в сети, - это код для копирования ВСЕХ текста RTB.

Есть идеи, как получить только текст в строке, по которой щелкнули?

Ответы [ 3 ]

2 голосов
/ 17 сентября 2009

Я серьезно покопался в сети, и вот рабочее решение.

private void richTextBox1_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
  TextPointer t = richTextBox1.GetPositionFromPoint(e.GetPosition(richTextBox1), true);

  string textAfterCursor  = t.GetTextInRun(LogicalDirection.Forward);
  string textBeforeCursor = t.GetTextInRun(LogicalDirection.Backward);

  string FullParagraphText = textBeforeCursor+textAfterCursor;
  MessageBox.Show(FullParagraphText);
}

(спасибо Джастину-Йозефу за его пост: http://blogs.microsoft.co.il/blogs/justinangel/archive/2008/01/29/tapuz-net-getting-wpf-s-flowdocument-and-flowdoucmentreader-mouseover-text.aspx )

0 голосов
/ 20 февраля 2014

Следующий код правильный:

private void richTextBox1_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
    TextPointer tp = richTextBox1.GetPositionFromPoint(e.GetPosition(richTextBox1), true);

    TextPointer line_start = tp.GetLineStartPosition(0);
    var nextStart = pos.GetLineStartPosition(1);
    TextPointer lineEnd = (nextStart != null ? nextStart : pos.DocumentEnd).GetInsertionPosition(LogicalDirection.Backward);

    TextRange tr = new TextRange(line_start, lineEnd);
    string line = tr.Text;
    MessageBox.Show(line);
}
0 голосов
/ 17 сентября 2009

Упс, я констатировал строки в обратном порядке. Вот пересмотренный код ... :) Ohad.

   private void richTextBox1_MouseDoubleClick(object sender, MouseButtonEventArgs e)
    {
        TextPointer t = richTextBox1.GetPositionFromPoint(e.GetPosition(richTextBox1), true);

        string textAfterCursor  = t.GetTextInRun(LogicalDirection.Forward);
        string textBeforeCursor = t.GetTextInRun(LogicalDirection.Backward);

        string FullParagraphText = textBeforeCursor+textAfterCursor;
        MessageBox.Show(FullParagraphText);


    }
...