TransWikia.com

¿Como mover el cursor dentro de las coordenadas de un panel?

Stack Overflow en español Asked by Javier Aceves on January 4, 2022

Tengo un problema con un código para hacer que mi mouse se mueva dentro de un panel de 640×480, lo que pasa es esto tengo un código sobre como mover el cursor con coordenadas que extrae de dos archivos de texto.

Al presionar el boton este mueve el mouse pero lo que pasa es que lo mueve por encima del panel en donde tengo contemplado el movimiento, eh leído que hay una forma de usar algo llamado PointToClient y el PointToScreen pero no obtuve resultados.

Dejo coordenadas para probar:

  • Coord X:
357                                 
336
338
343
357
263
257
246
276
  • Coord Y:
124
133
131
127
107
76
-88
-90
-105
  • Código:
public void cursor_track_Click(object sender, EventArgs e)
        {
           List<string> linesX = File.ReadLines(@"C:EyeMatrisCoordenadasCoordenadasX.txt").ToList();
           List<string> linesY = File.ReadLines(@"C:EyeMatrisCoordenadasCoordenadasY.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 es mi panel de 640x480
                resolution.PointToScreen(Cursor.Position = new Point(point.X, point.Y)); 
            }
        }

One Answer

Muestro el código y así podrás comparar lo que haces mal en el tuyo:

public void cursor_track_Click(object sender, EventArgs e)
{
    List<string> linesX = File.ReadLines(@"C:EyeMatrisCoordenadasCoordenadasX.txt").ToList();
    List<string> linesY = File.ReadLines(@"C:EyeMatrisCoordenadasCoordenadasY.txt").ToList();

    for(int i = 0; i < linesX.Count; i++)
    {
        Point point = new Point(int.Parse(linesX[i]), int.Parse(linesY[i]));
    
        // Generamos el punto al que queremos se mueva el cursor,
        // teniendo en cuenta las coordenadas del panel.
        Point miPunto = new Point(point.X + resolution.Left, 
                                  point.Y + resolution.Top);
        // resolution es mi panel de 640x480
        // ** resolution.PointToScreen(Cursor.Position = new Point(point.X, point.Y));
        Cursor.Position = this.PointToScreen(miPunto); 
    }
}

Observa que te puedes ahorrar la lista de puntos y hacerlo todo en un único bucle. Y mira que tú ya establecías la posición del cursor, pero sin conversión, luego lo que hacías era convertirlo pero sin establecerlo.

Lo correcto es transformar la coordenada de miPunto y luego asignar el valor obtenido a la posición del cursor.

Answered by Antonio S.F. on January 4, 2022

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP