今天看到苏飞的“一个拖动无标题栏窗体的方法 修正”,突然想起多年前的劳动成果,贴出来。
适用于有标题栏和无标题栏窗体,适用于窗体内控件,当然 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 }