/// <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/linyc/archive/2009/08/16/1547320.html

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

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

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

  2. 小天带你轻松解决Mybatis延迟加载原理源码问题

    Mybatis延迟加载原理源码解析 Mybatis基本结构图 由上图可以知道MyBatis延迟加载主要使⽤:JavassistProxyFactory,CgliProxyFactoryb实现类.这两种 ...

  3. window.open打开新窗口原页面出现[object window]解决办法

    问题描述:网站中在火狐浏览器中打开新的网页后原来的网页就会出现object window 页面一片空白 看了代码用的是下面的: 解决办法: 直接在打开新网页中加上返回值void(0) 就能完美解决 a ...

  4. 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 + ...

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

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

  6. robotframwork的WEB功能测试(一)—切换window窗口

    selenium2library提供的切换到新窗口的关键字,只有select window,而且也只能根据title.name.url去定位.如下图所示,明显在实际使用中是不够的. 所以这里总结了一下 ...

  7. Linux基本C编程fork、signal、time以及用printf在终端打印一个GUI窗口 - 使用cygwin

    1 fork, vfork示例 创建一个新进程的方法只有由某个已存在的进程调用fork()或vfork(): vfork创建新进程的主要目的在于调用exec函数执行另外的一个新程序,在没调用exec或 ...

  8. java如何阻塞父窗体,java图形设计,窗口阻塞的问题。

    转自:http://zhidao.baidu.com/question/354970135.html 打开一个java窗口(原JFrame),里面有个按钮,点击后出现另一个窗口(新JFrame),如何 ...

  9. Windows核心编程_窗口蒙版效果

    首先先看一下界面效果: 遮罩窗口: 模糊模态窗口: 保留特定控件 模糊保留特定控件: 遮罩+模糊效果: 遮罩模态效果: 怎么样是不是很炫酷,非常适合在提示用户新信息或者其它需要模态窗口时候展现的效果, ...

最新文章

  1. BCE或能成为BCH的一个侧链
  2. 人工智能:模型与算法 之 启发式搜索
  3. STM32速度---网页讲解
  4. 【线上分享】基于人眼主观视觉的画质评价与提升
  5. php xmlhttprequest,DOM XMLHttpRequest
  6. 分享一下:推荐一个网站,练习CSS3
  7. day15 java接口的基础语法
  8. python3读取txt文件数字签名_hash文件-对文件进行数字签名
  9. python上下文管理器ContextLib及with语句
  10. python+selenium+pycharm安装
  11. Word课程笔记(秋叶系列课程)
  12. teradata ttu_SQL语句笔记之Teradata
  13. C# 创建XML文件
  14. 如何利用网站优化给网站引流做营销
  15. 你不知道的Windows小技巧~~
  16. Nginx+FFmpeg rtsp转flv实时预览
  17. svn: E170001
  18. 初学者Cocos(TypeScritp)简单实现2048游戏
  19. 医学影像组学之病理切片分割(免费训练数据,标注数据,免费代码,免费教程)三天走完影像组学全部流程
  20. oscp——Hell: 1

热门文章

  1. QQ软件已被破坏或部分文件丢失,就是木马病毒引起的
  2. 一款通过人工智能AI计算无损放大图像软件
  3. 为什么非常想要一样东西的时候却得不到,但慢慢就不想要了?
  4. 视频直播点播平台EasyDSS如何通过接口调用实现截取视频的功能?
  5. C++实验3-定期存款利息计算器
  6. java代理实现爬取代理IP
  7. 软件工程论文书写设计步骤及如何降低重复率
  8. 怎么在Word中插入几何画板图形
  9. 维修记录,移动升级千兆宽带过程中的坑
  10. 浏览器如何显示页面(二)