Как установить указатель на экране в нужное положение? - PullRequest
0 голосов
/ 30 марта 2012

Я работаю над слиянием почты, используя Winform в качестве инструмента.Я предоставил 2 шаблона, один для деловых писем и другой для заметок.Для писем пользователь обычно вводит тело письма, в то время как другая информация выбирается из файла данных, который создается пользователем, нажав на опцию «Выбрать получателя».

Я хочу ограничить моего пользователя только вводомтело и указатель должны располагаться после второй строки приветствия.Указатель не может двигаться назад от этой позиции, но, конечно, может двигаться вперед.Как мне это сделать?

Прошу прощения за непонятность, если да.

1 Ответ

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

Если ваш текст в TextBox или RichTextBox, вы можете выбрать элемент управления и поместить курсор с помощью

// Set the cursor into the text box
bodyTextBox.Focus();

// Place the cursor at the desired position in the text
bodyTextBox.Select(start, 0);

. Вы должны выяснить, где начинается третья строка

const int indent = 30; // Desired indentation

// Place focus in this control
bodyTextBox.Focus();

// The following work only if we have at least 3 lines of text
if (bodyTextBox.Lines.Length >= 3) {

    int start = bodyTextBox.Lines[0].Length + // Length of first line
                bodyTextBox.Lines[1].Length + // Length of second line
                4 +   // 2 x 2 characters for two CR-LFs
                Math.Min(indent, bodyTextBox.Lines[2].Length);
    bodyTextBox.Select(start, 0);
}

Я предполагаю, что текст выглядит следующим образом

First line of text.<CR><LF>
Second line of text.<CR><LF>
<30 spaces for indent>
                      ^ desired position

Чтобы установить курсор в нужном месте, нам нужно посчитать общее количество символов от начала текста.Поскольку вы хотите поместить курсор на третью строку, это длина двух первых строк плюс два CR-LF (символы разрыва строки) в их конце плюс 30 символов в начале третьей строки.Если третья строка имеет длину менее 30 символов, мы не можем поместить курсор туда, поэтому мы помещаем ее как можно дальше вправо, то есть на последний символ этой строки с Math.Min(indent, bodyTextBox.Lines[2].Length);

Наконец, мыпоместите курсор туда с помощью Select.Поскольку мы не хотим выделять текст, мы определяем длину выделения как ноль.

...