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

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

спасибо

9 ответов


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

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

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


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

лучшим решением было:

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

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

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


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

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

richTextBox.SelectedText = "whatevertextyouwantinserted";

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

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

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;
}

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

обновление: мне нужен textBoxSt1.Text =

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

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

спасибо


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

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;
    }
}

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

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


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