为了账号安全,请及时绑定邮箱和手机立即绑定

使一个无边界的形式可以移动?

使一个无边界的形式可以移动?

C#
慕斯王 2019-07-13 09:31:10
当鼠标按下窗体时,是否有一种方法使窗体没有边框(FormBorderStyle设置为“None”),就像有边框一样?
查看完整描述

3 回答

?
jeck猫

TA贡献1909条经验 获得超7个赞

让我们不要让事情变得比他们所需要的更困难。我遇到了这么多代码片段,它们允许您拖动窗体(或其他控件)。他们中的许多人都有自己的缺点/副作用。尤其是那些让Windows认为窗体上的控件就是实际窗体的情况下。

话虽如此,这是我的片段。我一直在用它。我还想指出的是,您不应该像其他人一样使用它,因为它会导致表单在某些情况下闪烁。在某些情况下也是如此。使用此更新,我没有任何闪烁的问题:

private bool mouseDown;private Point lastLocation;

    private void Form1_MouseDown(object sender, MouseEventArgs e)
    {
        mouseDown = true;
        lastLocation = e.Location;
    }

    private void Form1_MouseMove(object sender, MouseEventArgs e)
    {
        if(mouseDown)
        {
            this.Location = new Point(
                (this.Location.X - lastLocation.X) + e.X, (this.Location.Y - lastLocation.Y) + e.Y);

            this.Update();
        }
    }

    private void Form1_MouseUp(object sender, MouseEventArgs e)
    {
        mouseDown = false;
    }


查看完整回答
反对 回复 2019-07-13
?
潇潇雨雨

TA贡献1833条经验 获得超4个赞

另一种更简单的方法来做同样的事情。

public partial class Form1 : Form{
    public Form1()
    {
        InitializeComponent();
        // set this.FormBorderStyle to None here if needed
        // if set to none, make sure you have a way to close the form!
    }
    protected override void WndProc(ref Message m)
    {
        base.WndProc(ref m);
        if (m.Msg == WM_NCHITTEST)
            m.Result = (IntPtr)(HT_CAPTION);
    }

    private const int WM_NCHITTEST = 0x84;
    private const int HT_CLIENT = 0x1;
    private const int HT_CAPTION = 0x2;}


查看完整回答
反对 回复 2019-07-13
  • 3 回答
  • 0 关注
  • 339 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信