Получение индекса строки на основе смещения пикселя - PullRequest
0 голосов
/ 06 сентября 2011

Я настраиваю рисование текстового поля, и теперь я реализую часть, в которой пользователь может щелкнуть строку и переместить курсор туда, где он щелкнул.

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

Итак, у меня есть точка, из которой я рисую строку (0), тогда у меня есть точка зрения, что пользовательщелкнул.Как получить строковый индекс символа, по которому они щелкнули?

Дополнительная информация : я рисую текст, сохраняя строки в списке, затем перебирая список и используя Graphics.DrawStringна каждой строке.

1 Ответ

1 голос
/ 06 сентября 2011

Нет простого способа найти символ в пикселе.

Однако вы можете найти пиксели, которые заполнит строка. Используйте метод Graphics.MeasureCharacterRanges . Вы можете выполнить двоичный поиск в вашей строке, пока не найдете строку, в которой MeasureCharacterRanges возвращает позицию вашего курсора.

Примечание: Вы можете увидеть метод Graphics.MeasureString и испытать желание использовать его. DO NOT! Этот метод не возвращает точные измерения. Я не могу вспомнить почему, но ты попробуешь, если попробуешь!

...