Получить позицию выделенного текста в строке в текстовом поле

Хорошо, я пытаюсь сделать что-то немного конкретное здесь. Я хочу получить расположение выделенного текста в текстовом поле.

Чтобы уточнить - я могу использовать местоположение для выбора текста. Если у меня есть textBox1, я мог бы сделать:

textBox1.SelectionStart = 1;
textBox1.SelectionLength = 4;

Это начнется со второй буквы и выберите 4 буквы.

Я хочу сделать обратное: когда пользователь выбирает текст, я хочу узнать, что такое начало и какова длина (или что такое начало и что такое конец. Любой из них будет работать).

Я подумал о простом поиске строки для выбранного текста (textBox1.SelectedText). Проблема возникает, если это обычное слово или строка, которая используется несколько раз. Например.

Это кот. Это кот. Это кот.

Если они выберут второе предложение, использование SelectedText для поиска строки для этого конкретного предложения не принесет мне пользы. Это может быть любой из 3.

Итак, мой вопрос: когда пользователь нажимает кнопку, как мне определить точные элементы, выбранные пользователем, чтобы я мог позже манипулировать этими конкретными элементами? Важно отметить последнюю часть — я, вероятно, захочу не только манипулировать текстом при нажатии кнопки. Я также захочу манипулировать им позже, в то время, когда текст может больше не выделяться. Это означает, что я захочу сохранить ЧТО-ТО, чтобы сказать мне, с какими конкретными частями предложения я имею дело. Если это решение нежизнеспособно, есть ли решение, которое вы можете придумать, где в приведенном выше примере «это кошка» пользователь может выбрать второе предложение, нажать кнопку, а затем я знаю, какое предложение было выбрано когда он нажал эту кнопку?


person user1548103    schedule 28.03.2013    source источник
comment
Вы не можете просто прочитать SelectionStart и SelectionLength ?   -  person Bart Friederichs    schedule 29.03.2013
comment
Разве вы не можете просто использовать значения textBox1.SelectionStart и textBox1.SelectionLength?   -  person Julián Urbano    schedule 29.03.2013
comment
... ... Я даже не думал об этом. Если это сработает, я буду чувствовать себя таким глупым. лол Спасибо за ответ! = Д   -  person user1548103    schedule 29.03.2013


Ответы (2)


Согласно документации, SelectionStart и SelectionLength можно как установить, так и прочитать. Просто используйте их.

person Bart Friederichs    schedule 28.03.2013
comment
Спасибо, Барт, и за этот, и за ваш оригинальный комментарий! Это решило мою проблему. Я не могу выбрать ответ еще 10 минут, но сделаю это в тот момент, когда это позволит мне. - person user1548103; 29.03.2013

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

// if textBox1.text = "Hello World World"; with first "World" selected
textBox1.SelectedText = textBox1.SelectedText.Replace("World", "Raj");
// then it becomes "Hello Raj World" 
person Parimal Raj    schedule 28.03.2013