У меня есть форма, которую можно перемещать, когда пользователь нажимает и перетаскивает область границы. Реализации, которые я видел, все блокируют текущую позицию мыши, так что, когда форма перемещается, форма переходит, так что мышь находится в верхнем левом углу. Я бы хотел изменить его так, чтобы он вел себя как обычная форма окна, и форма остается в том же положении относительно мыши при перемещении. Мой текущий код выглядит так:Переместить форму относительно местоположения, нажатого
Point locationClicked;
bool isMouseDown = false;
private void Form1_MouseDown(object sender, MouseEventArgs e)
{
isMouseDown = true;
locationClicked = new Point(e.Location.X, e.Location.Y);
}
private void Form1_MouseUp(object sender, MouseEventArgs e)
{
isMouseDown = false;
}
private void Form1_MouseMove(object sender, MouseEventArgs e)
{
if (isMouseDown && targetCell == new Point(-1, -1) && (mouseLocation.X < margin.X || mouseLocation.Y < margin.Y ||
mouseLocation.X > margin.X + cellSize.Width * gridSize.Width ||
mouseLocation.Y > margin.Y + cellSize.Height * gridSize.Height))
{
this.Location = new Point(e.Location.X - locationClicked.X, e.Location.Y - locationClicked.Y);
}
}
Когда я перетаскиваю окно, он ведет себя аналогично тому, что я хочу. Форма мерцает между двумя местами на экране, одна из которых перемещается примерно на половину скорости мыши. Есть ли способ исправить это?
Просто обрабатывать 'WM_NCHITTEST' сообщение надлежащим образом, и Windows, будет делать все окна движущегося для вас. –