У меня есть стандартный текстовый редактор WinForms, и я хочу вставить текст в позицию курсора в тексте. Как я могу получить позицию курсора?
Спасибо
У меня есть стандартный текстовый редактор WinForms, и я хочу вставить текст в позицию курсора в тексте. Как я могу получить позицию курсора?
Спасибо
Независимо от того, выбран ли какой-либо текст, свойство SelectionStart представляет индекс в тексте, в котором вы сидите. Таким образом, вы можете использовать String.Insert для ввода некоторого текста, например:
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;
}
Запись в событии Leave работает, но текст не вставлен, я что-то пропустил?
UPDATE: Мне нужен 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;
}
}
Вы должны сохранить свойство SelectionStart
в переменной, а затем, когда вы нажмете кнопку, переместите фокус обратно в TextBox. Затем установите для свойства SelectionStart
значение, указанное в переменной.
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
Чтобы получить позицию каретки, когда вы нажимаете мышь в тексте TextBox
, используйте событие TextBox
MouseDown
. Создайте точку, используя свойства X и Y для MouseEventArgs
. TextBox
имеет метод под названием GetCharIndexFromPosition(point)
. Передайте ему точку и верните позицию каретки. Это работает, если вы используете мышь, чтобы определить, где вы хотите вставить новый текст.