Я работаю над функцией перемещения формы путем перетаскивания дочернего элемента управления с помощью события мыши.
Код хорошо работает для Button
, TextBox
.
Но когда япримените его к ToolStrip
и очень быстро перемещайте мышь, курсор выйдет за пределы диапазона формы, форма перестает следовать за курсором.
Я также пытаюсь прослушать событие MouseLeave
на ToolStrip
и выполнить ту же работу, что и метод move
, но курсор все еще может выходить наружу, и местоположение формы не изменится, пока я не отпущу кнопку мыши.
Я знаю, что есть другие способы перетаскиванияформа, но я предпочитаю чистую реализацию C #.
Любая помощь приветствуется.
class MouseDragUtility
{
Control _f;
Size _offset;
public void Attach(Control c)
{
c.MouseDown += down;
}
void down(object sender, MouseEventArgs e)
{
var control = (Control)sender;
_f = control;
if (!FindForm(ref _f))
return;
_offset = (Size)(form.Location - (Size)Cursor.Position);
//register other events
control.MouseMove += move;
control.MouseUp += up;
}
void move(object sender, MouseEventArgs e)
{
_f.Location = Cursor.Position + _offset;
}
void up(object sender, MouseEventArgs e)
{
var control = (Control)sender;
control.MouseMove -= move;
control.MouseUp -= up;
_f = null;
}
// Find form in control's parents
static bool FindForm(ref Control c)
{
while (c != null)
{
if (c is Form)
return true;
c = c.Parent;
}
return false;
}
}