2012-03-16 10 views
0

ソースからコピーしてRichTextBox領域に貼り付けるテキストをランダムに並べ替えるアプリケーションを作成したいと思います。RichTextBox - ランダムに行を並べ替える

しかし、条件が1つあります。テキストは書式設定されています(太字、下線など)。だから、どんな提案?どのように見えますか?

私はRichTextBox.Rtfか何かを使うべきだと思っていますが、私は本当に初心者ですし、ヒントやサンプルコードをいただければ幸いです。

ありがとうございました

+0

questions/1287567/c-is-using-random-and-orderby-a-good-shuffle-algorithm – sll

+0

ソースが不明な間に書式を保持したい場合は、rtf、 HTML、単語など? –

答えて

0

少しトリッキーです。あなたは最高が逆に行われている今、あなたはこの

var random = new Random(); 
rtfLines = rtfLines.OrderBy(s => random.NextDouble()).ToArray(); 

クリアのような行を挿入RichtTextBox

richTextBox1.Text = ""; 

を行をシャッフルすることができ、この

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; 
} 

のようなフォーマットされたRTF形式のテキスト行を取得することができますテキストの先頭を選択する方が簡単なので、注文してください。

// 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

ありがとう、それは非常にうまくいくようです:)しかし、ここにもう一つのことがあります。私は、1つの関数「ペースト」だけで、コンテクストメニューをrichboxtextに追加しました。どのようなコードでクリップボードの内容をrichboxtext形式に貼り付けますか?私は試しました: プライベートvoid PasteToolStripMenuItem_Click_1(オブジェクト送信者、EventArgs e) { richTextBox1.Text = Clipboard.GetText(); } ただし、書式設定されていないテキストは貼り付けられます。どのように書式設定でテキストを貼り付けることができますか? – user1188235

+0

'richTextbox1.Paste();'キー組み合わせ 'Ctrl-C'を使うことができます。 –

0

タスクは複雑ではないようです(正しく理解していれば)。 クリップボードを文字列に変換し、配列を解析してSplit()を使用します。 必要なランドンイベントの数を決定し、すべての単語を繰り返します。イベントの量と一致するはずの反復ごとに乱数を生成し、その数をイベントの1つと交差させ、その特定の単語にそのケースを適用します。それを行う最も効率的な方法ではないかもしれませんが、それは私の心に来るものです。

+0

RTF-Lineは '\ r \ n'で区切られていないので、' String.Split'を使うことはできません。 OPはRTFフォーマットを維持したいので、物事はもう少し複雑です。 –

関連する問題