Как найти положение курсора в текстовом поле? С#
У меня есть стандартное текстовое поле WinForms, и я хочу вставить текст в положение курсора в тексте. Как я могу получить положение курсора?
спасибо
9 ответов
независимо от того, выбран ли какой-либо текст,SelectionStart свойство представляет индекс в текст, где вы каретку сидит. Таким образом, вы можете использовать строку.Вставить чтобы ввести какой-то текст, например:
myTextBox.Text = myTextBox.Text.Insert(myTextBox.SelectionStart, "Hello world");
- Джеймс, это довольно неэффективно, что вам нужно, чтобы заменить всю строку, когда вы хотите вставить текст в позицию курсора.
лучшим решением было:
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)
. Передайте ему точку, и он вернет позицию каретки. Это работает если вы используете мышь, чтобы определить, где вы хотите вставить новый текст.