AnswerBun.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!

Related Questions

Container-fluid dentro de un container (bootstrap)

1  Asked on December 18, 2021 by nicolas-ezequiel-almonacid

   

Actualizar tabla de DB con PHP para mostrar en sitio web

1  Asked on December 18, 2021 by jean-ramirez

     

Unir varios registros en un solo campo SQL Server

1  Asked on December 18, 2021 by martin-rangel-hernandez

     

Problema al ejecutar una clase Controlador

2  Asked on December 16, 2021 by david-calderon

     

Problema al descomprimir en docker

2  Asked on December 16, 2021

       

Move constructor

2  Asked on December 16, 2021

 

¿Cómo calcular el total en MySQL?

1  Asked on December 16, 2021 by akko

     

Descargar PDF desde WebView app Xamarin Visual Studio

0  Asked on December 16, 2021 by jorge-leyva

       

¿Cómo crear un JSON en php?

8  Asked on December 14, 2021 by user20482

   

¿Por que evento focus se dispara 2 veces?

1  Asked on December 14, 2021 by oscar-daz

   

Error creando un Identity en Oracle

1  Asked on December 14, 2021 by cutu

     

Obtener datos desde MySQL a JTextField Java

0  Asked on December 14, 2021 by ifabio

     

Ask a Question

Get help from others!

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