拖动不规程窗体分三个步骤:

1、响应窗体Mouse_Down事件,记录鼠标左键按下时的坐标

2、响应窗体的Mouse_Move事件,获取当前鼠标相对屏幕的坐标减去以上获得X,Y坐标,赋值给窗体Location

3、响应窗体的Mouse_Up事件,释放拖动操作

        Point _MouseOffset;
        bool _IsMouseDown = false;   
        private void Form_MouseDown(object sender, MouseEventArgs e)
        {
            int xOffset;
            int yOffset;

            if (e.Button == MouseButtons.Left)
            {
                xOffset = -e.X;
                yOffset = -e.Y;
                _MouseOffset = new Point(xOffset, yOffset);
                _IsMouseDown = true;
            }
        }
        private void Form_MouseMove(object sender, MouseEventArgs e)
        {
            if (_IsMouseDown)
            {
                Point mousePos = Control.MousePosition;
                mousePos.Offset(_MouseOffset.X, _MouseOffset.Y);
                Location = mousePos;
            }
        }
        private void Form_MouseUp(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
                _IsMouseDown = false;
        }

posted on 2011-07-04 10:20  xalyf  阅读(462)  评论(1编辑  收藏  举报