Make a borderless form movable?

前端 未结 21 1821
情歌与酒
情歌与酒 2020-11-22 09:48

Is there a way to make a form that has no border (FormBorderStyle is set to \"none\") movable when the mouse is clicked down on the form just as if there was a border?

21条回答
  •  逝去的感伤
    2020-11-22 10:12

    I was trying to make a borderless windows form movable which contained a WPF Element Host control and a WPF User control.

    I ended up with a stack panel called StackPanel in my WPF user control which seemed the logical thing to try click on to move. Trying junmats's code worked when I moved the mouse slowly, but if I moved the mouse faster, the mouse would move off the form and the form would be stuck somewhere mid move.

    This improved on his answer for my situation using CaptureMouse and ReleaseCaptureMouse and now the mouse does not move off the form while moving it even if I move it quickly.

    private void StackPanel_MouseDown(object sender, MouseButtonEventArgs e)
    {
        _start_point = e.GetPosition(this);
        StackPanel.CaptureMouse();
    }
    
    private void StackPanel_MouseUp(object sender, MouseButtonEventArgs e)
    {
        StackPanel.ReleaseMouseCapture();
    }
    
    private void StackPanel_MouseMove(object sender, MouseEventArgs e)
    {
        if (StackPanel.IsMouseCaptured)
        {
            var p = _form.GetMousePositionWindowsForms();
            _form.Location = new System.Drawing.Point((int)(p.X - this._start_point.X), (int)(p.Y - this._start_point.Y));
        }
    }
    
        //Global variables;
        private Point _start_point = new Point(0, 0);
    

提交回复
热议问题