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

时间:2019-09-09 17:39:29

标签: c# winforms

我对这段代码有问题,试图将光标移动到只有分辨率为我的面板上的坐标内(面板尺寸为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:\EyeMatris\Coord\CoordinatesX.txt").ToList();
           List<string> linesY = File.ReadLines(@"C:\EyeMatris\Coord\CoordinatesY.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:\EyeMatris\Coord\CoordinateX.txt").ToList();
            List<string> linesY = File.ReadLines(@"C:\EyeMatris\Coord\CoordinateY.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();

                }
            };

        }

1 个答案:

答案 0 :(得分:2)

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++;
}

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