C# 无边框点击任意位置拖动窗体

VS 窗体边框太丑,常常开发时取消边框,但无边框的窗体无法自由拖动,本文介绍如何点击任意位置拖动窗体。

1.定义变量

bool IsDragging = false;    //当前拖拽状态
Point p = new Point(0, 0);  //记录鼠标按下去的坐标
Point offset = new Point(0, 0); //记录动了多少距离

 2.鼠标按下、释放和移动事件 

private void Form1_MouseDown(object sender, MouseEventArgs e)
 {
            if (e.Button != MouseButtons.Left)
                return;

            //当前为拖曳状态
            IsDragging = true;
            p.X = e.X;  //记录坐标X,Y
            p.Y = e.Y; 
 }

 private void Form1_MouseUp(object sender, MouseEventArgs e)
 {

            //当前为不拖曳状态
            IsDragging = false;
 }

private void Form1_MouseMove(object sender, MouseEventArgs e)
{
            if (IsDragging)
            {
                //距离计算:移动的坐标-鼠标按下记录的坐标
                offset.X = e.X - p.X;
                offset.Y = e.Y - p.Y;
                //控件位置
                Location = PointToScreen(offset);
            }
 }

3.无边框窗体双击放大

我的做法是添加一个panel赋予双击事件,

private void panel_DoubleClick(object sender, EventArgs e)
{
            if (this.WindowState == FormWindowState.Maximized)
            {
                this.WindowState = FormWindowState.Normal;
            }
            else
            {
                this.WindowState = FormWindowState.Maximized;
            }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现C#窗体任意位置拖动效果,可以通过以下步骤进行: 1. 在窗体上添加一个Panel控件,并将其Dock属性设置为Top。这个Panel控件将作为窗体的标题栏。 2. 在Panel控件上添加一个Label或者其他控件,用来显示窗体的标题。 3. 在Panel控件的MouseDown事件中,获取鼠标当前的位置,并将窗体的Location属性设置为这个位置。同时设置一个变量记录鼠标按下时的位置。 4. 在Panel控件的MouseMove事件中,如果鼠标左键被按下,计算鼠标当前位置和按下时位置的偏移量,然后将窗体的Location属性加上这个偏移量。 下面是示例代码: ``` public partial class Form1 : Form { private Point mouseOffset; public Form1() { InitializeComponent(); } private void panelTitle_MouseDown(object sender, MouseEventArgs e) { mouseOffset = new Point(-e.X, -e.Y); this.Cursor = Cursors.SizeAll; } private void panelTitle_MouseMove(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { Point mousePos = Control.MousePosition; mousePos.Offset(mouseOffset.X, mouseOffset.Y); this.Location = mousePos; } } private void panelTitle_MouseUp(object sender, MouseEventArgs e) { this.Cursor = Cursors.Default; } } ``` 在上述代码中,panelTitle是我们添加的Panel控件,用来作为窗体的标题栏。在MouseDown事件中,我们记录鼠标按下时的位置,并将鼠标的光标设置为SizeAll,以便用户知道窗体可以被拖动。在MouseMove事件中,如果鼠标左键被按下,我们计算鼠标当前位置和按下时位置的偏移量,并将窗体的Location属性设置为鼠标当前位置加上偏移量。在MouseUp事件中,我们将光标设置回默认状态。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值