1

我目前正在使用提到的代码在特定控件(在本例中为 toolStrip)上单击并移动鼠标时移动我的表单。

private void toolStrip1_MouseDown(object sender, MouseEventArgs e)
    {
        if (e.Button == MouseButtons.Left) //Wenn die linke Maustaste gedrückt wurde,
            FormMouseDownLocation = e.Location; //wird die Position der Maus gespeichert
    }

    private void toolStrip1_MouseMove(object sender, MouseEventArgs e)
    {
        if (e.Button == MouseButtons.Left) //Wird die Linke taste gedrückt und bewegt,
        {
            this.Left += e.X - FormMouseDownLocation.X; //so verschiebt sich das Fenster bei jeder Bewegung um die Positionänderung der Maus (hier die X Pos)

            this.Top += e.Y - FormMouseDownLocation.Y; //so verschiebt sich das Fenster bei jeder Bewegung um die Positionänderung der Maus (hier die Y Pos)
        }
    }

现在我有一个问题。光标的移动速度比窗体快,因此光标经常离开工具条,窗体停止移动。只有当我将此代码与除主窗体之外的控件结合使用时,才会发生这种情况。

单击另一个控件时,是否有解决此问题的方法或者更改表单位置的更好方法?

提前致谢

附加信息:我正在使用 winforms,FormBorderStyle:无

4

2 回答 2

3

这是一个常见问题,您必须捕获鼠标以确保当光标移出工具条窗口时您仍然收到 MouseMove 事件。任何窗口都有问题,但更有可能是工具条,因为它们往往很细。使固定:

private void toolStrip1_MouseDown(object sender, MouseEventArgs e)
{
    if (e.Button == MouseButtons.Left) {
        FormMouseDownLocation = e.Location;
        toolStrip1.Capture = true;
    }
}

private void toolStrip1_MouseUp(object sender, MouseEventArgs e)
{
    toolStrip1.Capture = false;
}

请选择更好的变量名。“FormMouseDownLocation”异常不准确,位置与表单完全无关。

于 2013-03-27T11:17:38.527 回答
0

你可以参考这个。例如,您可以使用面板甚至可以用作标题的任何对象。请检查链接。不是他们使用的部分WndProc

于 2013-03-27T10:12:36.833 回答