2012-03-16 115 views
0

我想編寫一個應用程序,它將從源複製並粘貼到RichTextBox區域的文本隨機排序。RichTextBox - 隨機排序

但是,有一個條件 - 文本被格式化(有些單詞用粗體,下劃線等)。那麼有什麼建議?它應該是什麼樣子?

我想我應該使用RichTextBox.Rtf什麼的,但我真的是一個初學者,我很欣賞每一個提示或示例代碼。

感謝

+0

http://stackoverflow.com/questions/1287567/c-is-using-random-and-orderby-a-good-shuffle-algorithm – sll 2012-03-16 21:09:59

+0

所以,你想保持格式,而源未知:rtf, HTML,單詞等? – 2012-03-16 22:41:43

回答

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"; 
} 
+0

謝謝,這似乎工作得很好:)但還有一件事。我添加了上下文菜單到richboxtext只有一個功能「粘貼」。哪些代碼會將我的剪貼板內容粘貼到richboxtext表單中?我嘗試過: private void PasteToolStripMenuItem_Click_1(object sender,EventArgs e) { richTextBox1.Text = Clipboard.GetText(); } 但它粘貼非格式文本。我如何粘貼格式文本? – user1188235 2012-03-17 10:13:58

+0

'richTextbox1.Paste();'或者您可以使用組合鍵「Ctrl-C」。 – 2012-03-17 16:28:42

0

的任務看起來並不複雜(如果我理解正確的話)。 將您的剪貼板轉換爲字符串,然後解析到數組中 - 使用Split()。 然後確定您需要多少個隨機事件並遍歷每個單詞;爲每次迭代生成隨機數(應與事件數量匹配),將該數字與其中一個事件相交,並將該案例應用於該特定單詞。也許不是最有效的方式去做,但這是我想到的

+0

您不能使用'String.Split',因爲RTF-Lines不僅與'\ r \ n'分開。由於OP希望保留RTF格式,因此情況會更復雜一些。 – 2012-03-16 22:07:24