C#: отображение текста в richtextbox в обратном порядке / вверх
Я пытаюсь создать "отображение журнала" с помощью элемента управления richtextbox в C#.NET.
public void logLine(string line)
{
rtxtLoginMessage.AppendText(line + "rn");
}
Существует ли способ отображения текста в обратном порядке / вверх? (где самый новый журнал и дата будут показаны вверху)
Ваша помощь очень ценится.
2 ответов:
Короткий Ответ
Вы хотите установить выделение в 0, а затем установить свойство
SelectedText.public void logLine(string line) { rtxtLoginMessage.Select(0, 0); rtxtLoginMessage.SelectedText = line + Environment.NewLine; }Длинный Ответ
Как мне это удалось?
Используя Reflector , найдите элемент управления RichTextBox и найдите метод
AppendText(следуйте базовым типам доTextBoxBase). Посмотрите, что он делает (ниже для удобства).public void AppendText(string text) { if (text.Length > 0) { int num; int num2; this.GetSelectionStartAndLength(out num, out num2); try { int endPosition = this.GetEndPosition(); this.SelectInternal(endPosition, endPosition, endPosition); this.SelectedText = text; } finally { if ((base.Width == 0) || (base.Height == 0)) { this.Select(num, num2); } } } }Вы увидите, что он находит конечную позицию, устанавливает внутреннюю выборку, а затем устанавливает
Теперь, чтобы не повторять этот фрагмент кода каждый раз, когда вы хотите префиксировать текст, вы можете создать метод расширения .SelectedTextк новому значению. Чтобы вставить текст в самом начале, вы просто хотите найти начальную позицию вместо конечной позиции .Примечание: я использую только блокpublic static void PrependText(this TextBoxBase textBox, string text) { if (text.Length > 0) { var start = textBox.SelectionStart; var length = textBox.SelectionLength; try { textBox.Select(0, 0); textBox.SelectedText = text; } finally { if (textBox.Width == 0 || textBox.Height == 0) textBox.Select(start, length); } } }Try/Finally, чтобы соответствовать реализацииAppendText. Я не уверен, как Почему Мы хотели бы восстановить первоначальный выбор, еслиWidthилиHeightравно 0 (если вы знаете, почему, пожалуйста, оставьте комментарий, поскольку мне интересно это выяснить).Кроме того, есть некоторые возражения против использования "Prepend" в качестве противоположного для "Append", поскольку прямое английское определение сбивает с толку (сделайте поиск в Google - есть несколько сообщений на эту тему). Однако, если вы посмотрите на словарь компьютерных терминов Баррона , он стал общепринятым.
HTH,
Деннис
public void logLine(string line) { rtxtLoginMessage.Select(0, 0); rtxtLoginMessage.SelectedText = line + "\r\n"; }
Comments