Подтвердить что ты не робот

Как найти позицию курсора в текстовом поле? С#

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

Спасибо

4b9b3361

Ответ 1

Независимо от того, выбран ли какой-либо текст, свойство SelectionStart представляет индекс в тексте, в котором вы сидите. Таким образом, вы можете использовать String.Insert для ввода некоторого текста, например:

myTextBox.Text = myTextBox.Text.Insert(myTextBox.SelectionStart, "Hello world");

Ответ 2

Вы хотите проверить свойство SelectionStart TextBox.

Ответ 3

Джеймс, это довольно неэффективно, что вам нужно заменить всю строку, когда вы хотите вставить какой-либо текст в позицию курсора.

Лучшим решением будет:

textBoxSt1.SelectedText = ComboBoxWildCard.SelectedItem.ToString();

Если у вас ничего не выбрано, это добавит новый текст в позицию курсора. Если у вас есть что-то выбранное, это заменит выбранный текст текстом, который вы хотите вставить.

Я нашел это решение из сайта eggheadcafe.

Ответ 4

Все, что вам нужно сделать, это следующее:

Дважды щелкните элемент (кнопка, метка, что угодно), который вставляет текст в документ курсором. Затем введите это в:

richTextBox.SelectedText = "whatevertextyouwantinserted";

Ответ 5

В каком случае вы предложили бы записать переменную? Оставьте?

В настоящее время у меня есть:

private void comboBoxWildCard_SelectedIndexChanged(object sender, EventArgs e)
{
    textBoxSt1.Focus();
    textBoxSt1.Text.Insert(intCursorPos, comboBoxWildCard.SelectedItem.ToString());

}

private void textBoxSt1_Leave(object sender, EventArgs e)
{
    intCursorPos = textBoxSt1.SelectionStart;
}

Запись в событии Leave работает, но текст не вставлен, я что-то пропустил?

UPDATE: Мне нужен textBoxSt1.Text =

textBoxSt1.Text = textBoxSt1.Text.Insert(intCursorPos, comboBoxWildCard.SelectedItem.ToString());

Спасибо всем.

Спасибо

Ответ 6

Вот моя рабочая реализация, позволяющая вводить только цифры, с восстановлением последней допустимой текстовой позиции ввода:

Xaml:

<TextBox
      Name="myTextBox" 
      TextChanged="OnMyTextBoxTyping" />

Код позади:

private void OnMyTextBoxTyping(object sender, EventArgs e)
{
    if (!System.Text.RegularExpressions.Regex.IsMatch(myTextBox.Text, @"^[0-9]+$"))
    {
        var currentPosition = myTextBox.SelectionStart;
        myTextBox.Text = new string(myTextBox.Text.Where(c => (char.IsDigit(c))).ToArray());
        myTextBox.SelectionStart = currentPosition > 0 ? currentPosition - 1 : currentPosition;
    }
}

Ответ 7

Вы должны сохранить свойство SelectionStart в переменной, а затем, когда вы нажмете кнопку, переместите фокус обратно в TextBox. Затем установите для свойства SelectionStart значение, указанное в переменной.

Ответ 8

int cursorPosition = textBox1.SelectionStart;
//it will extract your current cursor position where ever it is
//textBox1 is name of your text box. you can use one
//which is being used by you in your form

Ответ 9

Чтобы получить позицию каретки, когда вы нажимаете мышь в тексте TextBox, используйте событие TextBox MouseDown. Создайте точку, используя свойства X и Y для MouseEventArgs. TextBox имеет метод под названием GetCharIndexFromPosition(point). Передайте ему точку и верните позицию каретки. Это работает, если вы используете мышь, чтобы определить, где вы хотите вставить новый текст.