C# 使用C移动winform时出现问题#

C# 使用C移动winform时出现问题#,c#,winforms,C#,Winforms,我的表单没有标题栏,因此我正在实现要拖动的代码 屏幕周围的整个窗体。我正在使用下面的代码来做这件事,这很好。 我的表格中有两个面板,PanelA和PanelB。在创业期间,我展示了 PanelA拖动功能完美的地方。稍后当用户单击时 在PanelA中的按钮,我需要使PanelA不可见并显示PanelB 但是,当显示面板B时,拖动不起作用。有什么问题 这里有问题吗 private void SerialPortScanner_MouseUp(object sender, MouseEventArgs

我的表单没有标题栏,因此我正在实现要拖动的代码 屏幕周围的整个窗体。我正在使用下面的代码来做这件事,这很好。 我的表格中有两个面板,
PanelA
PanelB
。在创业期间,我展示了
PanelA
拖动功能完美的地方。稍后当用户单击时 在
PanelA
中的按钮,我需要使
PanelA
不可见并显示
PanelB
但是,当显示
面板B
时,拖动不起作用。有什么问题 这里有问题吗

private void SerialPortScanner_MouseUp(object sender, MouseEventArgs e)
{
    this.drag = false; 
}

private void SerialPortScanner_MouseDown(object sender, MouseEventArgs e)
{
    this.drag = true;
    this.start_point = new Point(e.X, e.Y);
}

private void SerialPortScanner_MouseMove(object sender, MouseEventArgs e)
{
    if (this.drag)
    {
        Point p1 = new Point(e.X, e.Y);
        Point p2 = this.PointToScreen(p1);
        Point p3 = new Point(p2.X - this.start_point.X,
                             p2.Y - this.start_point.Y);
        this.Location = p3;
    }
} 

编辑:我意识到你不是在问拖放,而是在屏幕上移动表单。(感谢@Veer。)我编辑了你的问题以帮助澄清这一点。拖放是完全不同的事情,因为它是将信息从一个控件拖到另一个控件


尽管如此,我的回答的相同原则仍然适用,因为鼠标事件也在控制级别处理-您可能还需要处理
PanelB
中的鼠标事件。

处理拖放事件适用于表单,对吗?是否有类似的情况,我也需要从面板处理???@karthik:拖放处于控制级别(请参阅)。如果您想在
PanelB
中进行拖放,那么您还需要在那里处理它。您的参考涉及DragDrop事件。但我不认为QA使用任何此类事件。他只是想手动拖动他的窗口。@Veer:哦,是的,看起来这就是OP想要的,现在我从这个角度看问题。拖拽是我最讨厌的…你必须清楚一点。什么是串行端口扫描仪?哪个mouseevent启动这些方法?它是来自PanelA还是PanelB或Form?如果这些是PanelA事件,那么您还必须处理PanelB事件。