鼠标拖拽效果的实现

「爱情、让人受尽委屈。」 2021-11-10 13:24 597阅读 0赞

我所说的“鼠标拖拽效果”是指,鼠标在某个图标上按下,然后拖动,图标随着鼠标移动;这个效果的实现依赖控件的三个事件:Mouse_Down,Mouse_Move,Mouse_Up

  1. 首先在Mouse_Down事件设置”拖动”标志,表明鼠标已经按下,将要移动;同时记录鼠标的起始位置
  2. 然后在Mouse_Move事件计算鼠标的新位置,将图标设置到鼠标的位置,重新绘图
  3. 最后在Mouse_Up事件关闭”拖动”标志,标志鼠标已经弹起

实现如下:

首先,在Visual Studio 2010创建一个“Windows窗体应用程序”项目,在Form上任意拖入一个控件(比如Button,Label等,为了看得明白,我这里拖入的是PictureBox控件),为PictureBox的Image属性设置图片,效果如下:

24093454-e6c4c19be9d84916b73f7fed7a16d5c4.jpg

然后修改Form对应的代码:

首先为Form增加两个实例变量,分别为拖动标识和PictureBox控件的位置

ContractedBlock.gif ExpandedBlockStart.gif

  1. #region Fields
  2. private Boolean m_bDragFlag = false;
  3. private Point m_oStartLocation;
  4. #endregion

然后为PictureBox控件实现Mouse_Down,Mouse_Move,Mouse_Up事件

ContractedBlock.gif ExpandedBlockStart.gif

  1. #region Events
  2. //PictureBox.Click事件
  3. private void pbxDrag_Click(object sender, EventArgs e)
  4. {
  5. //0.取控件实例
  6. var pbxDrag = sender as PictureBox;
  7. //1.用边框模拟选中状态
  8. pbxDrag.BorderStyle = BorderStyle.FixedSingle;
  9. }
  10. //PictrueBox.MouseDown事件(鼠标在控件上按下左键触发)
  11. private void pbxDrag_MouseDown(object sender, MouseEventArgs e)
  12. {
  13. //0.取控件实例
  14. var pbxDrag = sender as PictureBox;
  15. //1.设置"拖动"标识
  16. this.m_bDragFlag = true;
  17. //2.设置鼠标形状
  18. this.Cursor = Cursors.SizeAll;
  19. //3.设置初始位置
  20. this.m_oStartLocation = pbxDrag.Location;
  21. }
  22. //PictureBox.MouseMove事件(鼠标在控件上移动后触发)
  23. private void pbxDrag_MouseMove(object sender, MouseEventArgs e)
  24. {
  25. //0.取控件实例
  26. var pbxDrag = sender as PictureBox;
  27. if (this.m_bDragFlag)
  28. {
  29. //1.设置鼠标形状
  30. this.Cursor = Cursors.Default;
  31. //2.设置控件新位置
  32. pbxDrag.Location = new Point(this.m_oStartLocation.X + e.X, this.m_oStartLocation.Y + e.Y);
  33. //3.重新绘制图形
  34. this.Invalidate();
  35. this.Update();
  36. //4.修正位置
  37. this.m_oStartLocation = pbxDrag.Location;
  38. }
  39. }
  40. //PictureBox.MouseUp事件(鼠标在控件上弹起时触发)
  41. private void pbxDrag_MouseUp(object sender, MouseEventArgs e)
  42. {
  43. //0.设置鼠标形状
  44. this.Cursor = Cursors.Default;
  45. //1.设置"拖动"标识
  46. this.m_bDragFlag = false;
  47. }
  48. #endregion

转载于:https://www.cnblogs.com/huaisha/archive/2013/03/24/2978145.html

发表评论

表情:
评论列表 (有 0 条评论,597人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Qt实现鼠标事件

    Qt实现鼠标拖拽事件 鼠标拖拽是一种常见的用户交互操作,它允许用户通过按下鼠标左键并移动来拖动对象或改变窗口大小。在Qt框架中,我们可以轻松地实现鼠标拖拽事件。本文将介绍如何

    相关 JavaScript 效果实现

      我们在访问一些网站时,会发现有些内容是可以拖拽的,比较方便,那么使用JS怎么实现呢?今天结合代码展示下拖拽效果的实现。  这里需要先熟悉下几个JS事件: onmouse