正在阅读:初学进阶:用C#创建可拖动窗体初学进阶:用C#创建可拖动窗体

2004-09-16 10:21 出处:CSDN 作者:lover_P 责任编辑:linjixiong


  // 示例代码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;
  }
  }

 


察看评论详细内容 我要发表评论
作者笔名 简短内容 发表时间
:

键盘也能翻页,试试“← →”键

关注我们

最新资讯离线随时看 聊天吐槽赢奖品