【问题标题】:Copy selected text from RichTextBox从 RichTextBox 复制选定的文本
【发布时间】:2010-10-31 17:14:45
【问题描述】:

我在网上四处搜索,但找不到从RichTextBox 复制/剪切/粘贴选定文本的方法。

即使是 MSDN 也没有答案。他们提供的代码不起作用:Copy() 似乎只适用于 TextBoxes,而不适用于 RichTextBoxes。

【问题讨论】:

  • 你说的是哪个 RichTextBox ? Windows 窗体还是 WPF?
  • 哪个例子不起作用?请给个链接!
  • 它是一个 C# Windows 窗体应用程序。 copy() 函数在 MSDN 上:msdn.microsoft.com/en-us/library/…

标签: c# winforms richtextbox


【解决方案1】:

如果我复制这个方法:

Clipboard.SetText(richTextBox1.SelectedRtf, TextDataFormat.Rtf);

我无法粘贴到记事本

如果我复制这个方法:

Clipboard.SetText(richTextBox1.SelectedText, TextDataFormat.UnicodeText);

它在 Word 和记事本中工作,但在 Word 中插入而不格式化

richTextBox1.Copy();

在 Word 和记事本中工作,但我无法修改字符串值。

如何在剪贴板中复制正常格式的字符串?

附:我找到了

DataObject dto = new DataObject();
dto.SetText(mesrtf, TextDataFormat.Rtf);
dto.SetText(mes, TextDataFormat.UnicodeText);
Clipboard.Clear();
Clipboard.SetDataObject(dto);

有效

【讨论】:

  • 对我来说,第二个参数true 是必要的。 Clipboard.SetDataObject(dto, true);
【解决方案2】:

如果您使用的是 .NET 3.0 及更高版本,您始终可以使用Clipboard.SetText()

当我想要richTextBox 中的所有内容而不必先选择所有内容或需要更改字符串时,我发现使用剪贴板很有用:

string text = "Summary:" + Environment.NewLine + this.richTextBoxSummary.Text;
Clipboard.SetText(text);

【讨论】:

    【解决方案3】:
    richTextBox1.SelectAll();
    
    richTextBox1.Copy();
    

    选择框中的所有文本并在将其再次粘贴到记事本时保留格式

    【讨论】:

      【解决方案4】:

      VB.NET 代码(支持格式化和纯文本)

      剪切

       Private Sub CutToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles CutToolStripMenuItem.Click
      
              Try
                  If RichTextBox1.SelectedText <> "" Then
                      Clipboard.SetData(DataFormats.Rtf,RichTextBox1.SelectedRtf)
                      RichTextBox1.SelectedRtf = ""
                  Else
                      MsgBox("No item is selected to cut", MsgBoxStyle.Information, "Cut")
                  End If
              Catch ex As Exception
                  MsgBox("Can't cut the selected item", MsgBoxStyle.Critical, "Cut")
              End Try
          End Sub
      

      复制

       Private Sub CopyToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles CopyToolStripMenuItem.Click
      
              Try
                  If RichTextBox1.SelectedText <> "" Then
                      Clipboard.SetData(DataFormats.Rtf,RichTextBox1.SelectedRtf)
                  Else
                      MsgBox("No item is selected to copy", MsgBoxStyle.Information, "Copy")
                  End If
              Catch ex As Exception
                  MsgBox("Can't copy the selected item", MsgBoxStyle.Critical, "Copy")
              End Try
          End Sub
      

      粘贴

       Private Sub PasteToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles PasteToolStripMenuItem.Click
      
              Try
                  If Clipboard.ContainsText(TextDataFormat.Rtf) Then
                      RichTextBox1.SelectedRtf = Clipboard.GetData(DataFormats.Rtf).ToString()
                  ElseIf Clipboard.ContainsText(TextDataFormat.Text) Then
                      RichTextBox1.SelectedText = Clipboard.GetData(DataFormats.Text).ToString()
                  Else
                      MsgBox("Clipboard is not contained with the valid text format ", MsgBoxStyle.Information, "Paste")
                  End If
              Catch ex As Exception
                  MsgBox("Can't paste the item", MsgBoxStyle.Critical, "Paste")
              End Try
          End Sub
      

      【讨论】:

      • 问题标记为C# 不是VisualBasic
      【解决方案5】:

      试试这个:

      复制

      Clipboard.SetText(richTextBox1.Text);
      

      粘贴

      richTextBox1.Paste();
      

      剪切

      richTextBox1.Cut();
      

      然后我就让它变得简单了,因为它是用户的选择,如果他/她想要复制、粘贴、剪切文本,所以只要保持简单,不要参数,否则用户会喜欢 LOL让我复制一段文字就可以了

      【讨论】:

        【解决方案6】:

        在 wpf 中

        richTextBox1.Copy();
        
        richTextBox1.Paste();
        

        【讨论】:

        • 这个问题被标记为 WinForms,而不是 WPF。
        猜你喜欢
        • 1970-01-01
        • 2011-06-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-22
        • 1970-01-01
        相关资源
        最近更新 更多