如何在面板坐标上移动光标?



我对这段代码有问题,我试图在我的面板上移动坐标只有内部坐标的光标,称为分辨率(我的面板尺寸是 640x480(。但是当按下按钮移动光标时,光标离开并停留在屏幕上的左上角,我该如何更改呢?

我读到了它,我可以使用poinToScreenpoinToClient做我想做的事,但无论如何都不能工作光标离开

代码从文本文件中获取坐标,因此我给出了要测试的坐标。

  • 坐标 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++;
}

在执行任何其他工作之前,最好将文件坐标加载并转换为点列表。 您的某些坐标为负数,因此它们可能会显示在屏幕外。 计时器运行时应禁用按钮,以便用户在动画制作时无法再次单击它。

最新更新