Как я могу отслеживать изменения свойства TextBox.SelectionStart winforms?

У меня есть многострочное текстовое поле, и я хотел бы отобразить текущий номер строки и номер столбца пользователя в метке под текстовым полем. Похоже, я могу получить номер строки и номер столбца, используя свойство SelectionStart, метод GetLineFromCharIndex и метод GetFirstCharIndexOfCurrentLine. Однако я не вижу никакого события, которое запускается каждый раз, когда выбор изменяется в текстовом поле.

Лучшее, что я вижу, это отслеживать события KeyPress и MouseDown и проверять свойство SelectionStart после каждого события. Я полагаю, что мог бы использовать таймер, чтобы следить за изменениями, но это странно.

Я что-то пропустил?


person Don Kirkby    schedule 25.05.2009    source источник
comment
Просто проверьте SelectionLength в событиях MouseUp и KeyUp.   -  person TaW    schedule 14.10.2020


Ответы (2)


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

person Marc Gravell    schedule 25.05.2009

Чтобы получить события SelectionChanged, вы также можете преобразовать TextBox в RichTextBox. RichTextBox ведут себя немного иначе, чем TextBox, поэтому это может быть не идеальное решение, но, по крайней мере, есть событие SelectionChanged.

person bsegraves    schedule 25.07.2011
comment
Спасибо за предложение, но мне особенно нужна простота текстового поля. Взамен я готов принять неэлегантность просмотра с таймером. - person Don Kirkby; 25.07.2011