拖拽窗体的实现

Posted comingx-zx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了拖拽窗体的实现相关的知识,希望对你有一定的参考价值。

之前做的项目,趁机总结一下新学到的技能

C#拖拽窗体的实现

首先设置FormBorderStyle为none,设置topmost为true(显示为最顶层窗体)。接下来,主要是三个鼠标事件的处理,以下,具体说明如何实现。

局部成员声明。

    private Point ptMouseCurrrnetPos, ptMouseNewPos,ptFormPos, ptFormNewPos;

    private bool blnMouseDown=false;

主要的三个鼠标事件,即MouseDown、 MouseMove、 MouseUp三个事件。

    private void frmTopMost_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)

    {

        if( blnMouseDown )

        {

            //Get the current position of the mouse in the screen

            ptMouseNewPos = Control.MousePosition;

 

            //Set window position

            ptFormNewPos.X = ptMouseNewPos.X - ptMouseCurrrnetPos.X + ptFormPos.X;

            ptFormNewPos.Y = ptMouseNewPos.Y - ptMouseCurrrnetPos.Y + ptFormPos.Y;

 

            //Save window position

            Location = ptFormNewPos;

            ptFormPos = ptFormNewPos;

 

            //Save mouse position

            ptMouseCurrrnetPos = ptMouseNewPos;

        }      

    }

 

    private void frmTopMost_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)

    {

        if(e.Button==MouseButtons.Left)

        {

            blnMouseDown = true;

 

            // Save window position and mouse position

            ptMouseCurrrnetPos = Control.MousePosition;

            ptFormPos = Location;

        }

    }

 

    private void frmTopMost_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)

    {

        if( e.Button == MouseButtons.Left)

            //Return back signal

            blnMouseDown = false;

    }

 

感谢沉寂的蓝的博客,想要了解悬浮窗口的实现可以参考下面的链接。

http://blog.sina.com.cn/s/blog_6e10930d0101acv9.html

 

以上是关于拖拽窗体的实现的主要内容,如果未能解决你的问题,请参考以下文章

ToolStrip控件左右拖拽移动效果实现

c# 的窗体form的FormBorderStyle属性设为None 运行后怎么不能拖拽呀??

Qt之窗体拖拽自适应分辨率自适应大小 good

Qt无边框窗体-最大化时支持拖拽还原

Winform拖拽改变无边框窗体大小

WPF设计の自定义窗体