为什么GetCharIndexFromPosition每次返回最后一个字符的位置
本文关键字:字符 位置 最后一个 返回 GetCharIndexFromPosition 为什么 | 更新日期: 2023-09-27 17:58:11
我需要在文本框中拖放一个按钮,该按钮将在鼠标位置插入特定文本。问题是,每次我按下按钮时,文本都会插入最后一个字符之后,但我需要它们位于当前鼠标位置。
这是代码:
void textBox1_DragDrop(object sender, DragEventArgs e)
{
TextBox tb = (TextBox)sender;
int positionToInsert = 0;
positionToInsert = tb.GetCharIndexFromPosition(new Point(e.X, e.Y));
tb.Text = tb.Text.Insert(positionToInsert, (string)e.Data.GetData(DataFormats.Text));
}
基于Control.DragDrop Event
文档。
DragEventArgs的X和Y属性在屏幕坐标中,而不是在客户端坐标中。下面的Visual C#代码行将属性转换为客户端点。
你需要做以下
positionToInsert = tb.GetCharIndexFromPosition(tb.PointToClient(new Point(e.X, e.Y)));
否则,它可能是一个超出控制范围的点,从而返回TextBoxBase.GetCharIndexFromPosition
文件中所述的最后位置
如果指定的位置不在控件的客户端矩形内,或超出控件中的最后一个字符,则返回值为最后一个字符串的索引。
DragEventArgs的X和Y属性在屏幕坐标中,而不是客户端坐标。下面的Visual C#代码行转换客户端点的属性。
如果指定的点的坐标在TextBox
的边界之外,则该方法返回文本框内最后一个字符的索引。
要测试这一点,请尝试:
tb.GetCharIndexFromPosition(new Point(1000, 1000));
解决方案:
Point clientPoint = tb.PointToClient(new Point(e.X, e.Y));
positionToInsert = tb.GetCharIndexFromPosition(clientPoint);