博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
个人代码库の自动粘合桌面边缘
阅读量:5922 次
发布时间:2019-06-19

本文共 2285 字,大约阅读时间需要 7 分钟。

 
using
System.Windows.Forms;
using
System;
namespace
**
{
public
partial
class
***
: form
{
/*
【必要事件】:
* No.1:窗体的 Move 事件。
* No.2:窗体的 MouseEnter事件。
* No.3:MouseLeave事件。在窗体的“deactivated”事件 + 窗体中[所有的控件]leave的事件中都加入该事件。
* 将“**”更改为最终要使用的窗体的namespace。
*/
int
intBianYuanXiangSu
=
7
;
//
边缘像素。即当窗体缩回去的时候,露出来多少像素,来提示窗体位置。
///
<summary>
///
自动粘合桌面边缘。
///
</summary>
///
<param name="intJingDu">
自动粘合的精度,默认10像素。
</param>
///
<param name="LeftRight">
是否启动在接近桌面左右边缘时也自动粘合。
</param>
private
void
myMethod_AutoAbsorb(
int
intJingDu ,
bool
LeftAndRight)
{
//
小于10像素.则使用默认10像素。
if
( intJingDu
<=
10
)
intJingDu
=
10
;
//
只有在窗体!不在!桌面的边缘的时候,才开始判断是否开始吸附。
if
( Left
!=
SystemInformation.WorkingArea.Width
-
this
.Size.Width
&&
Left
!=
0
&&
Top
!=
0
)
{
//
当窗体靠近桌面"上方"的时候,开始粘合。
if
( Location.Y
<=
intJingDu
&&
Location.Y
>
-
this
.Size.Height
+
intBianYuanXiangSu )
Top
=
0
;
if
( LeftAndRight
==
true
)
{
//
当窗体靠近桌面的"左边缘"时候,开始粘合。
if
(
this
.Location.X
<=
intJingDu
&&
Location.X
>
-
Size.Width
+
intBianYuanXiangSu )
Left
=
0
;
//
当窗体靠近桌面“右边缘”的时候,开始粘合。WorkingArea获得桌面的尺寸的属性。
if
( Location.X
>=
( SystemInformation.WorkingArea.Width
-
this
.Size.Width
-
intJingDu )
&&
Left
<
SystemInformation.WorkingArea.Width
-
intBianYuanXiangSu )
Left
=
SystemInformation.WorkingArea.Width
-
Size.Width;
}
}
}
private
void
myMethod_AutoAbsorb_MouseEnter()
{
if
( Top
==
-
this
.Size.Height
+
intBianYuanXiangSu )
//
上边缘
this
.Top
=
0
;
if
( Left
==
-
this
.Size.Width
+
intBianYuanXiangSu )
//
左边缘
this
.Left
=
0
;
if
( Left
==
SystemInformation.WorkingArea.Width
-
intBianYuanXiangSu )
//
右边缘
this
.Left
=
SystemInformation.WorkingArea.Width
-
this
.Size.Width;
}
//
在窗体的deactivated事件 + 窗体中所有的控leave件的事件中都加入以下事件。这样勉强达到效果。
private
void
myMethod_AutoAbsorb_MouseLeave()
{
//
只有鼠标不在窗体的内部范围的时候,才开始缩回去。
if
(
!
( ( Control.MousePosition.X
>=
Left
&&
Control.MousePosition.X
<=
Left
+
Width )
&&
( Control.MousePosition.Y
>=
Top
&&
Control.MousePosition.Y
<=
Top
+
Height ) ) )
{
if
( Top
==
0
)
//
上边缘
Top
=
-
Size.Height
+
intBianYuanXiangSu;
if
( Left
==
0
)
//
左边缘
Left
=
-
Size.Width
+
intBianYuanXiangSu;
if
( Left
==
SystemInformation.WorkingArea.Width
-
Size.Width )
//
右边缘
Left
=
SystemInformation.WorkingArea.Width
-
intBianYuanXiangSu;
}
}
}
}

 

转载于:https://www.cnblogs.com/AsionTang/archive/2010/05/09/1885712.html

你可能感兴趣的文章
如何导出数据库的数据词典
查看>>
linux下内存释放问题
查看>>
让Java和JavaScript进行交互
查看>>
android 上传文件
查看>>
linux逻辑卷管理
查看>>
java结合testng,利用mysql数据库做数据源的数据驱动实例
查看>>
LINQ之路12:LINQ Operators之数据转换(Projecting)
查看>>
SQL Server:数据库角色
查看>>
分享8个超棒的基于HTML5和jQuery的开发教程
查看>>
JFreeChart开发_用JFreeChart增强JSP报表的用户体验
查看>>
SpringMVC+Swagger详细整合
查看>>
计算机视觉领域最全汇总(第2部分)
查看>>
走进webpack(2)--第三方框架(类库)的引入及抽离
查看>>
[译] 所有你需要知道的关于完全理解 Node.js 事件循环及其度量
查看>>
脚本监控网络状态,输出日志并归档(V2)
查看>>
(六十九)复合语句
查看>>
Cisco ASA 5505配置详解
查看>>
我的友情链接
查看>>
java读取某个文件夹下的所有文件
查看>>
设计模式:装饰者
查看>>