C# RichTextBox-随机排序行

C# RichTextBox-随机排序行,c#,sorting,random,richtextbox,C#,Sorting,Random,Richtextbox,我想写一个应用程序,随机排序的文本行,我从一个源复制并粘贴到RichTextBox区域 但是,有一个条件-文本是格式化的(有些单词是粗体的,下划线等)。有什么建议吗?它应该是什么样子 我想我应该使用RichTextBox.Rtf或其他东西,但我真的是一个初学者,我很欣赏每一个提示或示例代码 谢谢这项任务似乎并不复杂(如果我理解正确的话)。 将剪贴板放入字符串,然后解析为数组-使用Split()。 然后确定您需要多少randon事件,并遍历每个单词;为每次迭代生成随机数(应该与事件数量匹配),将该

我想写一个应用程序,随机排序的文本行,我从一个源复制并粘贴到RichTextBox区域

但是,有一个条件-文本是格式化的(有些单词是粗体的,下划线等)。有什么建议吗?它应该是什么样子

我想我应该使用
RichTextBox.Rtf
或其他东西,但我真的是一个初学者,我很欣赏每一个提示或示例代码


谢谢

这项任务似乎并不复杂(如果我理解正确的话)。 将剪贴板放入字符串,然后解析为数组-使用Split()。
然后确定您需要多少randon事件,并遍历每个单词;为每次迭代生成随机数(应该与事件数量匹配),将该数字与其中一个事件相交,并将该大小写应用于该特定单词。也许不是最有效的方法,但这就是我想到的

这有点棘手。您可以像这样检索格式化的RTF文本行

string[] rtfLines = new string[richTextBox1.Lines.Length];
for (int i = 0; i < rtfLines.Length; i++) {
    int start = richTextBox1.GetFirstCharIndexFromLine(i);
    int length = richTextBox1.Lines[i].Length;
    richTextBox1.Select(start, length);
    rtfLines[i] = richTextBox1.SelectedRtf;
}
var random = new Random();
rtfLines = rtfLines.OrderBy(s => random.NextDouble()).ToArray();
清除RichtTextBox

richTextBox1.Text = "";
插入行最好按相反的顺序进行,因为更容易选择文本的开头

// Insert the line which will be the last line.
richTextBox1.Select(0, 0);
richTextBox1.SelectedRtf = rtfLines[0];

// Prepend the other lines and add a line break.
for (int i = 1; i < rtfLines.Length; i++) {
    richTextBox1.Select(0, 0);

    // Replace the ending "}\r\n" with "\\par }\r\n". "\\par" is a line break.
    richTextBox1.SelectedRtf =
        rtfLines[i].Substring(0, rtfLines[i].Length - 3) + "\\par }\r\n";
}
//插入最后一行。
richTextBox1.选择(0,0);
richTextBox1.SelectedRtf=rtfLines[0];
//在其他行之前添加换行符并添加换行符。
对于(int i=1;i
因此,您希望在源代码未知时保留格式:rtf、html、word等?您不能使用
String.Split
,因为rtf行不仅仅用
\r\n
分隔。由于OP希望保留RTF格式,所以事情就复杂了一点。谢谢,这似乎工作得很好:)但还有一件事。我在richboxtext中添加了上下文菜单,只使用了一个函数“粘贴”。什么代码将我的剪贴板内容粘贴到richboxtext表单?我尝试了:private void PasteToolStripMenuItem_Click_1(对象发送者,EventArgs e){richTextBox1.Text=Clipboard.GetText();},但它粘贴了未格式化的文本。如何使用格式粘贴文本?
richTextbox1.paste()
或者您可以使用组合键
Ctrl-C