我想編寫一個應用程序,它將從源複製並粘貼到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