【问题标题】:How to get a single paragraph text from a richtextbox when double clicking on it双击时如何从富文本框中获取单个段落文本
【发布时间】:2010-11-28 22:56:08
【问题描述】:

我在控制 WPF 富文本框控件时遇到了一些问题。

我想要的是如下: 我有一个名为richTextBox1 的RichTextBox 控件,我用数据库中的数据填充了它。

单击控件时,我需要将文本放在一行(意思是单个段落)。

我在网上找到的只是复制所有 RTB 文本的代码。

任何想法如何获取被点击的行中的文本?

【问题讨论】:

  • 我正在使用 VS2008 C# 构建代码,所以我需要 C# 的答案...

标签: richtextbox paragraph


【解决方案1】:

我进行了认真的网络挖掘,这是一个可行的解决方案。

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);
}

(感谢 Justin-Josef 的帖子: http://blogs.microsoft.co.il/blogs/justinangel/archive/2008/01/29/tapuz-net-getting-wpf-s-flowdocument-and-flowdoucmentreader-mouseover-text.aspx )

【讨论】:

  • 这是不正确的,因为一行可以由多个运行组成。事实上,一个词可以由 2 个运行组成。
【解决方案2】:

糟糕,我以相反的顺序连接了字符串。 这是修改后的代码... :) 哦哈德。

   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);


    }

【讨论】:

    【解决方案3】:

    以下代码正确:

    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);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-19
      • 2011-01-24
      • 2015-07-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多