我正在使用通过鼠标事件拖动子控件来移动表单的功能。
该代码适用于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;
}
}