Получить положение курсора относительно элемента управления-C#
Я хочу получить положение мыши относительно элемента управления, в котором присутствует указатель мыши. Это означает, что когда я поместите курсор в начальную точку (верхний левый угол) управления он должен дать (0,0). Я использую следующий код:
private void panel1_MouseMove(object sender, MouseEventArgs e)
{
this.Text = Convert.ToString(Cursor.Position.X + ":" + Cursor.Position.Y);
}
но это дает положение по отношению к экрану не к контролю.
пример кода будет оценен по достоинству.
8 ответов
вы можете напрямую использовать Location
свойства MouseEventArgs
аргумент передается обработчику событий.
private void panel1_MouseMove(object sender, MouseEventArgs e)
{
Text = e.Location.X + ":" + e.Location.Y;
}
использовать управление.PointToClient чтобы преобразовать точку из относительных координат экрана в относительные координаты управления. Если вам нужно пойти в другую сторону, используйте PointToScreen.
следующее даст вам координаты мыши относительно вашего элемента управления. Например, это приводит к (0,0), если мышь находится над верхним левым углом элемента управления:
var coordinates = yourControl.PointToClient(Cursor.Position);
для получения относительного от абсолютного и абсолютного от относительных координат можно использовать следующие методы:
Point Control.PointToClient(Point point);
Point Control.PointToScreen(Point point);
просто вычесть из позиции курсора левую и верхнюю координаты элемента управления:
this.Text = Convert.ToString(
Cursor.Position.X - this.Left + ":" +
Cursor.Position.Y - this.Top);
Я использую MouseLocation и PointToClient для проверки. А затем используйте его в таймере!
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);
}
где "lienzo" моя панель холста
курсор.Положение точки возврата на экране, но управление.PointToClient(Курсор.Position) возвращает точку управления (например, control - > panel). В вашем случае у вас есть e.Найдите точку возврата на элементе управления.