基本信息
源码名称:C# 磁性窗体 实例源码下载( 可吸附在主窗体上下左右)
源码大小:0.05M
文件格式:.zip
开发语言:C#
更新时间:2013-11-17
友情提示:(无需注册或充值,赞助后即可获取资源下载链接)
嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300
本次赞助数额为: 2 元×
微信扫码支付:2 元
×
请留下您的邮箱,我们将在2小时内将文件发到您的邮箱
源码介绍
using System; using System.Drawing; namespace System.Windows.Forms { public class MagneticMagnager { MagneticPosition Pos;//位置属性 Form MainForm, ChildForm; bool IsFirstPos;//是否第一次定位ChildForm子窗体 public int step;//磁性子窗体ChildForm移动步长 public Point LocationPt;//定位点 delegate void LocationDel();//移动子窗体的委托 public MagneticMagnager(Form _MainForm, Form _ChildForm, MagneticPosition _pos) { IsFirstPos = false; step = 20; MainForm = _MainForm; ChildForm = _ChildForm; Pos = _pos; MainForm.LocationChanged = new EventHandler(MainForm_LocationChanged); ChildForm.LocationChanged = new EventHandler(ChildForm_LocationChanged); MainForm.SizeChanged = new EventHandler(MainForm_SizeChanged); ChildForm.SizeChanged = new EventHandler(ChildForm_SizeChanged); ChildForm.Load =new EventHandler(ChildForm_Load); MainForm.Load =new EventHandler(MainForm_Load); } void ChildForm_Load(object sender, EventArgs e) { GetLocation(); } void MainForm_Load(object sender, EventArgs e) { GetLocation(); } void MainForm_LocationChanged(object sender, EventArgs e) { GetLocation(); } void MainForm_SizeChanged(object sender, EventArgs e) { GetLocation(); } void ChildForm_SizeChanged(object sender, EventArgs e) { GetLocation(); } void GetLocation()//定位子窗体 { if (ChildForm == null) return; if (Pos == MagneticPosition.Left) LocationPt = new Point(MainForm.Left - ChildForm.Width, MainForm.Top); else if (Pos == MagneticPosition.Top) LocationPt = new Point(MainForm.Left, MainForm.Top - ChildForm.Height); else if (Pos == MagneticPosition.Right) LocationPt = new Point(MainForm.Right, MainForm.Top); else if (Pos == MagneticPosition.Bottom) LocationPt = new Point(MainForm.Left, MainForm.Bottom); ChildForm.Location = LocationPt; } void ChildForm_LocationChanged(object sender, EventArgs e)//当窗体位置移动后 { if (!IsFirstPos) { IsFirstPos = true; return; } LocationDel del = new LocationDel(OnMove);//委托 MainForm.BeginInvoke(del);//调用 } void OnMove()//移动子窗体 { if (ChildForm.Left > LocationPt.X) if (ChildForm.Left - LocationPt.X > step) ChildForm.Left -= step; else ChildForm.Left = LocationPt.X; else if (ChildForm.Left < LocationPt.X) if (ChildForm.Left - LocationPt.X < -step) ChildForm.Left = step; else ChildForm.Left = LocationPt.X; if (ChildForm.Top > LocationPt.Y) if (ChildForm.Top - LocationPt.Y > step) ChildForm.Top -= step; else ChildForm.Top = LocationPt.Y; else if (ChildForm.Top < LocationPt.Y) if (ChildForm.Top - LocationPt.Y < -step) ChildForm.Top = step; else ChildForm.Top = LocationPt.Y; } } public enum MagneticPosition//磁性窗体的位置属性 { Left = 0, Top = 1, Right = 2, Bottom = 3 } }