Я обнаружил странное поведение элемента управления textbox. Когда вы вводите текст в конце текстового поля, GetPositionFromCharIndex остается 0,0. Однако если вы вставите текст перед последним символом в текстовом поле, GetPositionFromCharIndex IS обновится.
Не знаю, можете ли вы использовать это в своих интересах, но я думаю, вы, возможно, хотели бы это знать.
Редактировать: Хорошо, LOL, это похоже на работу, как ужасно это может быть ...:
Point pt = textBox1.GetPositionFromCharIndex(textBox1.SelectionStart > 0 ? textBox1.SelectionStart - 1 : 0);
Редактировать 2: В ретроспективе я думаю, что поведение не так странно, поскольку SelectionStart в конце текстового поля возвращает индекс, где будет напечатан следующий символ, а не там, где на самом деле находится последний символ. Поскольку GetPositionFromCharIndex будет возвращать позицию символа, индекс еще не существующего символа возвращает, по-видимому, 0,0.
Редактировать 3: Сочетая мой код с MikeJ и немного переработав его, вы можете получить точное положение каретки:
SizeF size = g.MeasureString(textBox1.Text.Substring(textBox1.SelectionStart - 1, 1), textBox1.Font);
pt.X += (int)size.Width;
Признаюсь, это чертовски уродливо, как я его напечатал, но с некоторым редактированием вы сможете получить из этого хороший код.