/// <summary>
/// 磁性窗体函数
/// </summary>
/// <param name="form">窗体控件(一般传this即可)</param>
/// <param name="space">自定义的与屏幕边缘的距离</param>
/// <param name="isWorkingArea">是否在屏幕工作区进行该操作(true表示不包括任务栏,false则包括整个屏幕的范围)</param>
public void Form_Welt(Control form, int space, bool isWorkingArea)
{
//获取窗体的左上角的x,y坐标
int x = form.Location.X;
int y = form.Location.Y;

int sW = 0;
int sH = 0;

if (isWorkingArea)
{
//获取屏幕的工作区(不包括任务栏)的宽度和高度
sW = Screen.PrimaryScreen.WorkingArea.Width;
sH = Screen.PrimaryScreen.WorkingArea.Height;
}
else
{
//获取整个屏幕(包括任务栏)的宽度和高度
sW = Screen.PrimaryScreen.Bounds.Width;
sH = Screen.PrimaryScreen.Bounds.Height;
}

//如果窗体的左边缘和屏幕左边缘的距离在用户定义的范围内,则执行左贴边
if ((x <= space && x > 0) || (Math.Abs(x) <= space && x < 0)) //Math.Abs(x)是取绝对值
{
form.Location = new Point(0, y);
}

//如果窗体的上边缘和屏幕上边缘的距离在用户定义的范围内,则执行上贴边
if ((y <= space && y > 0) || (Math.Abs(y) <= space && y < 0))
{
form.Location = new Point(x, 0);
}

//窗体右边缘跟屏幕右边缘的距离
int rightW = sW - form.Right;
//窗体下边缘跟屏幕下边缘的距离
int bottomW = sH - form.Bottom;

//判断右边的情况
if ((rightW <= space && form.Right < sW) || (Math.Abs(rightW) <= space && rightW < 0))
{
form.Location = new Point(sW - form.Width, y);
}
//判断下边的情况
if ((bottomW <= 10 && form.Bottom < sH) || (Math.Abs(bottomW) <= space && bottomW < 0))
{
form.Location = new Point(x, sH - form.Height);
}
}

看到千千静听的窗口可以在接近屏幕边缘时贴在边缘上觉得不错,自己也有这个需要,所以写了这个方法,测试了感觉还蛮不错的,哈哈~
使用的时候只要在想应用的窗体的Form_Move(object sender,EventAges e)事件里面调用即可
ps:不过有时窗体可能会比较闪,这个可能是代码还有待改善,或者是在Form_Move事件里面来调用不大合适,反正功能是实现了,要是哪位有更好的方法,欢迎回复交流一下啊~

转载于:https://www.cnblogs.com/jufu/p/4300523.html

c#轻松实现磁性窗口相关推荐

  1. c#轻松实现磁性窗口【原】

    /// <summary> /// 磁性窗体函数 /// </summary> /// <param name="form">窗体控件(一般传t ...

  2. python怎么计算圆_python根据圆的参数方程求圆上任意一点的坐标

    from math import cos, sin,pi x0,y0=0,0 r=4.0 angle=-25 x1 = x0 + r * cos(angle * pi / 180) y1 = y0 + ...

  3. Win7运行窗口的打开方法

    Win7系统中运行窗口可谓是最常用的功能之一,可以帮助我们快速执行程序,在系统有问题时经常运用其协助解决.有用户问到运行窗口在哪?如何打开?找不到怎么办?其实方法不难,下面小编就跟大家详细介绍一下Wi ...

  4. 《轻轻松松背单词II》扩展:拖动、切换窗口,成绩显示,增量显示

    转自这个帖,原来的链接无效了,更新一下: http://pgy.hotbbs.cn/script/forum/view.asp?article_id=13916249&board_id=96& ...

  5. c语言窗口如何加背景图片,MFC积累---关于设置背景图片、背景颜色插入背景音乐...

    第二种方法是把声音文件加入到资源中,然后从资源中播放声音.Visual C++支持WAVE型资源,用户在资源视图中单击鼠标右键并选择Import命令,然后在文件选择对话框中选择The Microsof ...

  6. 土豆 GhostXP SP3 系统5月纯净版

    土豆 GhostXP SP3 系统5月纯净版 TD_201305ZJB.iso 大小: 694624256 字节 MD5: 58710AF9D125CA86B3A77131B2691BAD SHA1: ...

  7. 土豆 GhostXP SP3 系统2012新年纯净版V1

    土豆 GhostXP SP3 系统2012新年纯净版V1 文件名: TDJT-XPCJB2012V1.ISO 大小: 700.61 MB MD5: 293403f2d10c155f1d34b7d432 ...

  8. 关于Delphi通用涵数

    DELPHI程序注册码设计(转载)     思路是这样的:程序运行时先检测注册表,如果找到注册项,则表明已经注册,如果没有找到注册项,则提示要求注册.         <注册例程>     ...

  9. 如何在Java中对文件进行模式匹配和显示相邻行

    最近,我们在jOOλ0.9.9中发布了有关超棒的窗口函数支持的文章 ,我相信这是对我们所做的库的最佳补充. 今天,我们将在一个用例中研究窗口函数的出色应用,该用例受到以下堆栈溢出问题Sean Nguy ...

最新文章

  1. 【SSH网上商城项目实战16】Hibernate的二级缓存处理首页的热门显示
  2. 变量置换方式linux,Shell变量测试与内容置换
  3. Python flask出现jinja2.exceptions.TemplateNotFound错误(修复host就好了???)
  4. 基于Session共享的单点登录或通行证系统方案
  5. xavier初始化_深入解读xavier初始化(附源码)
  6. ReactNative(API)Alert
  7. mysql allowmultiqueries=true_Mysql批量更新的一个坑-allowMultiQueries=true允许批量更新(转)...
  8. 3D手势姿态跟踪算法:手机端实时检测,多个手势同时捕捉
  9. 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。
  10. qt4.8.6操作ppt
  11. CacheCloud安装配置
  12. OS | 【四 文件管理】强化阶段大题解构 —— FAT文件系统、UFS文件系统访问文件过程
  13. MAC如何将[搜狗输入法]设置为默认输入法
  14. 自动驾驶(十五)---------再论轨迹规划
  15. Bluetooth 蓝牙介绍(四):低功耗蓝牙BLE Mesh网络Ⅱ —— Mesh网络
  16. 最优化理论——阻尼牛顿法
  17. 抖音内容运营全解剖,看这一篇就够了 !
  18. WirelessCar借助亚马逊云科技的安全服务,实现车端到云端的数据安全
  19. 真心话大冒险HTML5小游戏,真心话大冒险游戏怎么玩才有趣
  20. java实现录屏软件

热门文章

  1. YoLov3训练自己的数据集(小白手册)
  2. 浙大计算机专业博士后,博士后 - 浙江大学系统医学研究中心
  3. 整理Cocos2d-x 面试题解
  4. 面试 cocos2dx
  5. Mac(M1)开发环境配置
  6. 绑定新浪微博API 实现验证 登录 返回接口获取信息
  7. 《MVC》——ViewData、ViewBag、TempData、model
  8. ArcGIS中的土地利用变化分析
  9. AVPlayer进行视频播放
  10. android手机blhx素材提取