我正在使用DragEventArgs作为Drop事件,并在TextBox中具有x,y Drop Insert位置。
如何在TextField中将x,y转换为索引? 我非常重要的是要找出这个信息!
非常感谢!
答案 0 :(得分:3)
您需要使用TextBox
的<{3}}方法:
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;
}
答案 1 :(得分:3)
这是一个小的增强,用于计算最接近滴点的字符的位置索引。 GetCharacterIndexFromPoint方法实际上并没有返回最接近字符的位置(就像它记录的那样),但是它返回了删除点下面的字符的索引(即使删除的点位于右边缘旁边) char的情况,在这种情况下,该方法应该返回下一个char的索引,该索引实际上更接近于丢弃点。)
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;
}