c# - ventana - visual basic 6.0 obtener coordenadas del mouse
Obtener la posiciĆ³n del cursor con respecto al control-C# (8)
Cursor.Position return Point on Screen, pero Control.PointToClient (Cursor.Position) devuelve el punto en el control (por ejemplo, control -> panel). En su caso, tiene e.Locate que punto de retorno en el control.
Quiero obtener la posición del mouse con respecto al control en el que está presente el puntero del mouse. Eso significa que cuando coloco el cursor en el punto de inicio (esquina superior izquierda) del control, debería dar (0,0). Estoy usando el siguiente código:
private void panel1_MouseMove(object sender, MouseEventArgs e)
{
this.Text = Convert.ToString(Cursor.Position.X + ":" + Cursor.Position.Y);
}
Pero esto le da la posición con respecto a la pantalla no al control.
Código de muestra será apreciado.
Lo siguiente le dará las coordenadas del mouse relativas a su control. Por ejemplo, esto da como resultado (0,0) si el mouse está sobre la esquina superior izquierda del control:
var coordinates = yourControl.PointToClient(Cursor.Position);
Puede usar directamente la propiedad Location
del argumento MouseEventArgs
que se le pasó a su controlador de eventos.
private void panel1_MouseMove(object sender, MouseEventArgs e)
{
Text = e.Location.X + ":" + e.Location.Y;
}
Se pueden usar los siguientes métodos para obtener lo relativo de lo absoluto y lo absoluto de las coordenadas relativas:
Point Control.PointToClient(Point point);
Point Control.PointToScreen(Point point);
Simplemente reste de la posición del cursor las coordenadas Izquierda y Superior del control:
this.Text = Convert.ToString(
Cursor.Position.X - this.Left + ":" +
Cursor.Position.Y - this.Top);
Use Control.PointToClient para convertir un punto de acordes relativos a la pantalla en acordes relativos de control. Si necesita ir por el otro lado, use PointToScreen.
Yo uso MouseLocation y PointToClient para comprobar. Y luego usarlo en un temporizador!
bool IsMouseHover(Control c, Control container)
{
Point p = Control.MousePosition;
Point p1 = c.PointToClient(p);
Point p2 = container.PointToClient(p);
if (c.DisplayRectangle.Contains(p1) && container.DisplayRectangle.Contains(p2))
{
return true;
}
return false;
}
private void lienzo_MouseLeftButtonDown_1(object sender, MouseButtonEventArgs e)
{
Point coordenadas = new Point();
coordenadas = Mouse.GetPosition(lienzo);
string msg = "Coordenadas mouse :" + coordenadas.X + "," + coordenadas.Y;
MessageBoxResult resultado;
string titulo = "Informacion";
MessageBoxButton botones = MessageBoxButton.OK;
MessageBoxImage icono = MessageBoxImage.Information;
resultado = MessageBox.Show(msg, titulo, botones, icono);
}
Donde "lienzo" es mi panel de lona