| // 示例代码1 Form.Top = Control.MousePosition.Y - mousePosition.Y; Form.Left = Control.MousePosition.X - mousePosition.X; |
这样还不行,因为我们的mousePosition表示的是鼠标在窗体用户区内的相对坐标,但在移动窗体的时候还要考虑窗体标题栏和边框的尺寸。在上面的基础上,我们将代码修正为:
| // 示例代码2 Form.Top = Control.MousePosition.Y - mousePosition.Y - SystemInformation.FrameBorderSize.Height - SystemInformation.CaptionHeight; Form.Left = Control.MousePosition.Y - mousePosition.Y - SystemInformation.FrameBorderSize.Width; |
也就是说,在高度上(纵坐标)要减去标题栏的高度和边框的高度,而在宽度上(横坐标)要减去边框的宽度。然而,当制作一个既没有标题栏也没有边框的可拖动窗体时,使用“示例代码1”所示的代码就可以了。 上面的代码只是一个示范性代码。具体的操作如下: 首先,为窗体添加一个私有域:
| private System.Drawing.Point mousePoint; |
然后,为窗体添加鼠标按下事件处理方法(我这里是MainForm_MouseDown,别忘了将该方法链接到MainForm.MouseDown事件,这不用多说了吧?):
| private void MainForm_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e) { if(e.Button == MouseButtons.Left) { this.mousePosition.X = e.X; this.mousePosition.Y = e.Y; } } |
在这里注意对鼠标按键进行筛选。 接下来,为窗体添加鼠标移动事件处理方法(我这里是MainForm_MouseMove):
| private void MainForm_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e) { if(e.Button == MouseButtons.Left) { Form.Top = Control.MousePosition.Y - mousePosition.Y - SystemInformation.FrameBorderSize.Height - SystemInformation.CaptionHeight; Form.Left = Control.MousePosition.Y - mousePosition.Y - SystemInformation.FrameBorderSize.Width; } } |
|