RichTextBox - 随机排序行

时间:2012-03-16 20:57:41

标签: c# sorting random richtextbox

我想编写一个应用程序,它将从源文件中复制的文本随机排序并粘贴到RichTextBox区域。

但是,有一个条件 - 格式化文本(某些单词以粗体显示,下划线等)。那有什么建议吗?应该怎么样?

我认为我应该使用RichTextBox.Rtf或其他东西,但我真的是初学者,我感谢每一个提示或示例代码。

由于

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

这有点棘手。您可以像这样检索格式化的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";
}