RichTextBox - сортировка строк случайным образом - PullRequest
0 голосов
/ 17 марта 2012

Я хочу написать приложение, которое случайным образом сортирует строку текста, которую я копирую из источника и вставляю в область RichTextBox.

Однако есть одно условие - текст форматируется (некоторые слова выделены жирным шрифтом, подчеркнуты и т. Д.). Так какие-нибудь предложения? Как это должно выглядеть?

Я думаю, что должен использовать RichTextBox.Rtf или что-то еще, но я действительно новичок, и я ценю каждую подсказку или пример кода.

Спасибо

Ответы [ 2 ]

0 голосов
/ 17 марта 2012

Это немного сложно. Вы можете получить отформатированные строки текста 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 голосов
/ 17 марта 2012

Задача кажется несложной (если я правильно понимаю).Получить ваш буфер обмена в строку, а затем разобрать в массив - используйте Split ().Затем определите, сколько случайных событий вам нужно, и переберите каждое слово;генерировать случайное число для каждой итерации (которое должно соответствовать количеству событий), пересекать это число с одним из событий и применять этот случай к этому конкретному словуВозможно, не самый эффективный способ сделать это, но вот что приходит мне на ум

...