我想编写一个应用程序,它将从源复制并粘贴到RichTextBox区域的文本随机排序。RichTextBox - 随机排序
但是,有一个条件 - 文本被格式化(有些单词用粗体,下划线等)。那么有什么建议?它应该是什么样子?
我想我应该使用RichTextBox.Rtf
什么的,但我真的是一个初学者,我很欣赏每一个提示或示例代码。
感谢
我想编写一个应用程序,它将从源复制并粘贴到RichTextBox区域的文本随机排序。RichTextBox - 随机排序
但是,有一个条件 - 文本被格式化(有些单词用粗体,下划线等)。那么有什么建议?它应该是什么样子?
我想我应该使用RichTextBox.Rtf
什么的,但我真的是一个初学者,我很欣赏每一个提示或示例代码。
感谢
这是有点棘手。您可以检索格式化的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";
}
谢谢,这似乎工作得很好:)但还有一件事。我添加了上下文菜单到richboxtext只有一个功能“粘贴”。哪些代码会将我的剪贴板内容粘贴到richboxtext表单中?我尝试过: private void PasteToolStripMenuItem_Click_1(object sender,EventArgs e) { richTextBox1.Text = Clipboard.GetText(); } 但它粘贴非格式文本。我如何粘贴格式文本? – user1188235 2012-03-17 10:13:58
'richTextbox1.Paste();'或者您可以使用组合键“Ctrl-C”。 – 2012-03-17 16:28:42
的任务看起来并不复杂(如果我理解正确的话)。 将您的剪贴板转换为字符串,然后解析到数组中 - 使用Split()。 然后确定您需要多少个随机事件并遍历每个单词;为每次迭代生成随机数(应与事件数量匹配),将该数字与其中一个事件相交,并将该案例应用于该特定单词。也许不是最有效的方式去做,但这是我想到的
您不能使用'String.Split',因为RTF-Lines不仅与'\ r \ n'分开。由于OP希望保留RTF格式,因此情况会更复杂一些。 – 2012-03-16 22:07:24
http://stackoverflow.com/questions/1287567/c-is-using-random-and-orderby-a-good-shuffle-algorithm – sll 2012-03-16 21:09:59
所以,你想保持格式,而源未知:rtf, HTML,单词等? – 2012-03-16 22:41:43