C# 使用面板移动无边框窗体 我有3个面板,它们是码头顶部,左边,中间是集装箱。

C# 使用面板移动无边框窗体 我有3个面板,它们是码头顶部,左边,中间是集装箱。,c#,.net,winforms,C#,.net,Winforms,由于面板已满,所以没有空间单击主窗体 我想移动我的表单,单击顶部固定面板 下面的代码在不使用面板的情况下工作正常(单击面板下的主窗体) 我试着用panel1_MouseDown制作,但没有成功 有什么方法可以实现吗?这似乎对我很有用: bool moving; Point offset; Point original; void panel1_MouseDown(object sender, MouseEventArgs e) { moving = true; panel1.C

由于面板已满,所以没有空间单击主窗体

我想移动我的表单,单击顶部固定面板

下面的代码在不使用面板的情况下工作正常(单击面板下的主窗体)

我试着用panel1_MouseDown制作,但没有成功


有什么方法可以实现吗?

这似乎对我很有用:

bool moving;
Point offset;
Point original;

void panel1_MouseDown(object sender, MouseEventArgs e)
{
    moving = true;
    panel1.Capture = true;
    offset = MousePosition;
    original = this.Location;
}

void panel1_MouseMove(object sender, MouseEventArgs e)
{
    if (!moving)
        return;

    int x = original.X + MousePosition.X - offset.X;
    int y = original.Y + MousePosition.Y - offset.Y;

    this.Location = new Point(x, y);
}

void panel1_MouseUp(object sender, MouseEventArgs e)
{
    moving = false;
    panel1.Capture = false;
}

试试这个,它对我有用。在主面板上使用此方法,我是指您想要移动窗体或去观看我找到的此视频的面板


还是一样。没有移动。@S.Zunbag嗯,我制作了一个简单的应用程序,有两个面板,分别称为panel1和panel2,正如您所描述的那样对接,上面的代码可以工作。因此,一定还有其他一些因素没有在OP中描述。如果你制作一个带有两个面板的简单应用程序,并使用上面的代码会发生什么?@MatthewWatson如上所述,我使用图片框和表格布局面板尝试了相同的代码,效果很好
bool moving;
Point offset;
Point original;

void panel1_MouseDown(object sender, MouseEventArgs e)
{
    moving = true;
    panel1.Capture = true;
    offset = MousePosition;
    original = this.Location;
}

void panel1_MouseMove(object sender, MouseEventArgs e)
{
    if (!moving)
        return;

    int x = original.X + MousePosition.X - offset.X;
    int y = original.Y + MousePosition.Y - offset.Y;

    this.Location = new Point(x, y);
}

void panel1_MouseUp(object sender, MouseEventArgs e)
{
    moving = false;
    panel1.Capture = false;
}
int mouseX, mouseY;
        bool mouseM;

        private void panel7_MouseUp(object sender, MouseEventArgs e)
        {
            mouseM = false;
        }

        private void panel7_MouseDown(object sender, MouseEventArgs e)
        {
            mouseX = e.X;
            mouseY = e.Y;
            mouseM = true;
        }

        private void panel7_MouseMove(object sender, MouseEventArgs e)
        {
            if (mouseM)
            {
                SetDesktopLocation(MousePosition.X - mouseX, MousePosition.Y - mouseY);
            }
        }