洪星的博客(原创版,新闻除外)

信息技术 软件开发 电信 移动通信(欢迎和我交流:QQ219402,15152399197)

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

今天看到苏飞的“一个拖动无标题栏窗体的方法 修正”,突然想起多年前的劳动成果,贴出来。

适用于有标题栏和无标题栏窗体,适用于窗体内控件,当然 Form 也不例外,只要能添加 MouseDown、MouseMove 事件,无需添加 MouseUp 事件,也无需考虑 Form 是否有标题栏。

本方法采用 Control.MousePosition,而没有采用 MouseEventArgs e 获取数据,是因为这样无需考虑窗体有无标题栏和边框的大小,也无需考虑是窗体引发事件,还是窗体内控件引发事件。

 1 // 洪星 ‎2006‎年‎11‎月‎14‎日
 2 // www.hongcing.com 
 3 // QQ 219402
 4 
 5 // 窗体的屏幕坐标
 6 Point formPoint;
 7 
 8 // 鼠标光标的屏幕坐标
 9 Point mousePoint;
10 
11 // 获取窗体的屏幕坐标和鼠标光标的位置(屏幕坐标)
12 private void MainForm_MouseDown(object sender, MouseEventArgs e)
13 {
14     formPoint = this.Location;
15     mousePoint = Control.MousePosition;
16 }
17 
18 // 响应鼠标移动,并移动窗口
19 private void MainForm_MouseMove(object sender, MouseEventArgs e)
20 {
21     if (Control.MouseButtons == MouseButtons.Left)
22     {
23         Point mousePos = Control.MousePosition;
24         this.Location = this.formPoint + (Size)mousePos - (Size)this.mousePoint;
25     }
26 }

 

posted on 2010-02-05 14:55  洪星  阅读(3988)  评论(2编辑  收藏  举报