一.设置FormBorderStyle为None,则 窗体是 无法被拖动的。
二.若要拖动可通过重写OnMouseMove方法或者MouseDown、MouseUp、MouseMove方法

1.方法一:重写OnMouseMove
以下是代码
[DllImport(“user32.dll”)]
public static extern bool ReleaseCapture();
[DllImport(“user32.dll”)]
public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);

protected override void OnMouseMove(MouseEventArgs e)
{
base.OnMouseMove(e);
if (e.Button == MouseButtons.Left)
{
//这里一定要判断鼠标左键按下状态,否则会出现一个很奇葩的BUG,不信邪可以试一下~~
ReleaseCapture();
SendMessage(Handle, 0x00A1, 2, 0);
}
}

2.方法二:重写MouseDown、MouseUp、MouseMove方法
在窗体属性中添加响应

以下是代码:
Class ClassName
{
private Point mouseOff; //抓取窗体Form中的鼠标的坐标,需要设置一个参数
private bool leftFlag; //标签,用来标记鼠标的左键的状态
private void FrmMain_MouseDown(object sender,MouseEventArgs e) //鼠标左键按下后触发的MouseDown事件
{
if(e.Button == MouseButtons.Left) //判断鼠标左键是否被按下
{
mouseOff = new Point(e.X, e.Y); //通过结构,将鼠标在窗体中的坐标(e.X,e.Y)赋值给mouseOff参数
leftFlag = true; //标记鼠标左键的状态
}
}

private void FrmMain_MouseMove(object sender,MouseEventArgs e)  //鼠标移动触发的MouseMove事件
{if(leftFlag)    //判断,鼠标左键是否被按下{Point mouseSet = Control.MousePosition; //抓取屏幕中鼠标光标所在的位置mouseSet.Offset(-mouseOff.X, -mouseOff.Y);  //两个坐标相减,得到窗体左上角相对于屏幕的坐标Location = mouseSet;    //将上面得到的坐标赋值给窗体Form的Location属性}
}private void FrmMain_MouseUp(object sender,MouseEventArgs e)    //鼠标释放按键后触发的MouseUp事件
{if(leftFlag){leftFlag = false;}
}private void FrmMain_KeyPress(object sender,KeyPressEventArgs e)    //拖动窗体时,按下a键,测试与MouseUp事件一样。(窗体的KeyPress属性设置为True)
{                                                                   //这里只是将FrmMain_KeyPress方法与窗体Form的KeyPress事件绑定,但是窗体上的Panel也响应该事件。(Panel上没有KeyPress事件)           if (e.KeyChar == 'a')                                           //因为Form的KeyPreview属性,设置为True后,会向窗体注册窗体控件的键盘事件,所以鼠标拖动Panel,按下键值,其实是响应的Form的keypress事件。{leftFlag = false;}
}

}

c# winform 无边框窗体 移动办法相关推荐

  1. C# WinForm 无边框窗体,加阴影、拖动、改变大小等功能完美实现(自认为是完美的 ^=^)

    关于Winform的无边框窗体实现,网络上有很多大牛文章,这里不赘述.我也是参考网络上的思路,在使用别人的代码基础上,发现和遇到了很多小问题,所以做了改造,以下做个记录,也是给需要的人提供一点思路,如 ...

  2. 再谈winform无边框窗体的鼠标托动与缩放

    在winform经常用到无边框的窗体,原因就是想使自己的程序界面完全的自定义,网上也有过不少的相关资料 今天我发了一下的午的时间整理了一下.觉得还不错,贴出来看看. 为了提高托动的缩放的效率,减少系统 ...

  3. WinForm 无边框窗体 拖动工作区移动窗体

    方案1 : 通过重载消息处理实现.重写窗口过程(WndProc),处理一些非客户区消息(WM_NCxxxx),C#中重写窗口过程不用再调用SetWindowLong API了,直接overide一个W ...

  4. C#:WinForm无边框窗体移动方法、模仿鼠标单击标题栏移动窗体位置

    方法一:直接通过修改窗体位置从而达到移动窗体的效果 方法二:直接伪装发送单击任务栏消息,让应用程序误以为单击任务栏从而移动窗体 方法一 1.定义一个位置信息Point用于存储鼠标位置 private ...

  5. 通过调用API函数实现的无边框窗体的拖拽,比判断坐标更快捷

    在winform程序中,有时会选择边框设计会none,但是这样就不能拖拽窗体移动 解决方案有二: 1,判断坐标控制拖拽 2.利用API函数, 下面介绍利用API函数,方便,快捷 #region 移动无 ...

  6. 01.WPF中制作无边框窗体

    [引用:]http://blog.csdn.net/johnsuna/article/details/1893319 众所周知,在WinForm中,如果要制作一个无边框窗体,可以将窗体的FormBor ...

  7. WPF 调用API修改窗体风格实现真正的无边框窗体

    原文:WPF 调用API修改窗体风格实现真正的无边框窗体 WPF中设置无边框窗体似乎是要将WindowStyle设置为None,AllowTransparency=true,这样才能达到WinForm ...

  8. 无边框窗体和用户控件以及权限

    无边框窗体: 就是吧窗体的边框去掉,然后自己做按钮设置功能. 无边框窗体的移动: 将下面代码直接复制粘贴,将窗体的鼠标按下事件的方法改成下面方法的名字就可以直接使用 1 //窗体移动API 2 [Dl ...

  9. 再谈无边框窗体的操作

    本文介绍操作无边框窗体的其他几个方面的技巧. 设置浮动菜单 通常情况下,在无边框窗体中不能设置菜单.如果在无边框窗体中设置了菜单,运行时窗体上就会出现标题栏.那么,是否在无边框窗体中就不能使用菜单了呢 ...

  10. 无边框窗体移动的方法

    文章目录 1 无边框窗体移动的方法 1.1 无边框窗体移动的方法 1 无边框窗体移动的方法 1.1 无边框窗体移动的方法 当我们把窗体设置为无边框后,会发现用鼠标拖动窗体时是没有反应的,我们需要在窗体 ...

最新文章

  1. ansys选择一个面上所有节点_如何使用ANSYS经典界面的选择工具
  2. js 拖动层示例[转]
  3. [BZOJ 4800][Ceoi2015]Ice Hockey World Championship(Meet-in-the-Middle)
  4. 对比less聊scss(1):scss特性
  5. java 微信群发多图文_[Java教程]httpClient实现微信公众号消息群发
  6. 基于scrapy爬虫的天气数据采集(python)
  7. BackTrack5汉化后打开Txt乱码解决方法
  8. 发布一个适合服务端C++程序的高效日志库
  9. webrequest HttpWebRequest webclient/HttpClient
  10. [Java] 蓝桥杯ALGO-59 算法训练 快速排序
  11. [转]PE文件格式详解(下)
  12. Hibernate(转载)
  13. 支付宝 支付宝扫描生成的二维码提示:码已失效,请刷新二维码后重试
  14. UnityWebPlayer使用(2) 动态改变src
  15. 2022年Java面试宝典【4万字带答案】
  16. 毕业设计 stm32单片机智能药箱设计与实现 - 物联网
  17. 检测网站CDN是否生效
  18. 《简约至上:交互式设计四策略》读书感悟
  19. 数据结构与算法课程设计之五子棋(人机)
  20. java 递归算法N的乘阶

热门文章

  1. 使用application记录页面访问次数
  2. [USACO10HOL]牛的政治Cow Politics
  3. 一张图带你了解游戏程序员的学习之路
  4. 继电器在交流应用时的zero-crossing
  5. 后端开发发展学习路线
  6. sklearn 中的 make_blobs 的参数解释
  7. cython混淆加密
  8. 拉格朗日松弛(二)——实例及代码
  9. shell 中#!/bin/sh 的意思
  10. 重装系统要花钱?教你免费一键重装win10系统