Как преобразовать позицию X y в TextBox в текстовый индекс? - PullRequest
2 голосов
/ 06 января 2011

Я использую DragEventArgs для события перетаскивания и имею позицию вставки капли x, y внутри TextBox.

Как конвертировать x, y и Index в TextField? Я чрезвычайно важен для меня, чтобы узнать эту информацию!

Большое спасибо!

Ответы [ 2 ]

3 голосов
/ 29 июля 2011

Вот небольшое улучшение, которое вычисляет индекс позиции персонажа, который находится ближе всего к точке сброса. Метод GetCharacterIndexFromPoint на самом деле не возвращает позицию ближайшего символа (как это задокументировано), но возвращает индекс символа, который находится ниже точки отбрасывания (даже если точка отбрасывания находится рядом с правый край символа, в этом случае метод должен возвращать индекс следующего символа, который фактически ближе к точке сброса).

private int GetRoundedCharacterIndexFromPoint(TextBox textBox, Point dropPoint)
{
    int position = textBox.GetCharacterIndexFromPoint(dropPoint, true);

    // Check if the dropped point is actually closer to the next character
    // or if it exceeds the righmost character in the textbox
    // (in this case increase position by 1)
    Rect charLeftEdge = textBox.GetRectFromCharacterIndex(position, false);
    Rect charRightEdge = textBox.GetRectFromCharacterIndex(position, true);
    double charWidth = charRightEdge.X - charLeftEdge.X;
    if (dropPoint.X + charWidth / 2 > charRightEdge.X) position++;

    return position;
}
3 голосов
/ 06 января 2011

Вам необходимо использовать GetCharacterIndexFromPoint метод TextBox:

void textBox1_Drop(object sender, DragEventArgs e)
{
    TextBox textBox = (TextBox)sender;
    Point position = e.GetPosition(textBox);
    int index = textBox.GetCharacterIndexFromPoint(position, true);
    string text = (string)e.Data.GetData(typeof(string));
    textBox.SelectionStart = index;
    textBox.SelectionLength = 0;
    textBox.SelectedText = text;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...