我对这段代码有问题,我试图在我的面板上移动坐标只有内部坐标的光标,称为分辨率(我的面板尺寸是 640x480(。但是当按下按钮移动光标时,光标离开并停留在屏幕上的左上角,我该如何更改呢?
我读到了它,我可以使用poinToScreen
或poinToClient
做我想做的事,但无论如何都不能工作光标离开
代码从文本文件中获取坐标,因此我给出了要测试的坐标。
- 坐标 X
357
336
338
343
357
263
257
246
276
- 坐标 Y
124
133
131
127
107
76
-88
-90
-105
- 法典:
public void cursor_track_Click(object sender, EventArgs e)
{
List<string> linesX = File.ReadLines(@"C:EyeMatrisCoordCoordinatesX.txt").ToList();
List<string> linesY = File.ReadLines(@"C:EyeMatrisCoordCoordinatesY.txt").ToList();
List<Point> points = new List<Point>();
for(int i = 0; i< linesX.Count; i++)
{
Point p = new Point(int.Parse(linesX[i]), int.Parse(linesY[i]));
points.Add(p);
}
foreach (var point in points) {
resolution.PointToScreen(Cursor.Position = new Point(point.X, point.Y));
}
}
更新
添加了观看动画的计时器
添加了LarsTech的行代码答案
Timer tt = null;
int index = 0;
public void cursor_track_Click(object sender, EventArgs e)
{
List<string> linesX = File.ReadLines(@"C:EyeMatrisCoordCoordinateX.txt").ToList();
List<string> linesY = File.ReadLines(@"C:EyeMatrisCoordCoordinateY.txt").ToList();
List<Point> points = new List<Point>();
index = 0;
tt = new Timer()
{ Interval = 500, Enabled = true };
tt.Tick += (ss, ee) =>
{
for (int i = 0; i < linesX.Count; i++)
{
Point p = new Point(int.Parse(linesX[i]), int.Parse(linesY[i]));
points.Add(p);
}
foreach (var point in points)
{
//Cursor.Position = new Point(point.X, point.Y);
Cursor.Position = resolution.PointToScreen(point);
tt.Stop();
}
};
}
PointToXXX 函数返回一个转换点。 它不会设置光标位置。 像这样尝试:
Cursor.Position = resolution.PointToScreen(point);
您可能必须使用计时器来制作动画。
从您的代码更新,您的 Tick 代码应如下所示:
tt.Tick += (ss, ee) => {
if (index > linesX.Count - 1) {
tt.Stop();
} else {
Point p = new Point(int.Parse(linesX[index]), int.Parse(linesY[index]));
Cursor.Position = resolution.PointToScreen(p);
}
index++;
}
在执行任何其他工作之前,最好将文件坐标加载并转换为点列表。 您的某些坐标为负数,因此它们可能会显示在屏幕外。 计时器运行时应禁用按钮,以便用户在动画制作时无法再次单击它。