Короткий ответ
Вы хотите установить выбор на 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 (если вы знаете почему, пожалуйста, оставьте комментарий, так как я заинтересован в поиске. выход)
1041 * Кроме того, есть некоторые разногласия с помощью «PREPEND» как противоположность для «Append», как прямое английское определение сбивает с толку (сделать поиск Google - есть несколько сообщений на эту тему).Однако, если вы посмотрите словарь компьютерных терминов
Barron , он стал общепринятым.
HTH,
Dennis