【问题标题】:Can PictureBox leave a ghost on a Form1 after moving it with a mouse?用鼠标移动后,PictureBox 会在 Form1 上留下重影吗?
【发布时间】:2020-04-18 16:00:59
【问题描述】:

我通过左键单击它们并将它们拖动到另一个位置来移动 Form1 上的图片框。 (即,将 mousemove、mousedown、mouseup 与 e.X 和 e.Y 一起使用)。我还使用拖放将线条形状从一个图片框连接到另一个图片框。但是,当拖动线形的末端时,当它位于图片框上方时,我不会显示线形的末端 - 表示可以放在给定的图片框上。

问题是,在将图片框移动到所需位置后,有时拖动的线条形状的末端会消失在不再存在的“幽灵”或图片框的残留物上。显然,每当我移动图片框时,都需要更新控制位置。那么,在我移动图片框之后,是否需要对 Form1 的控件进行某种刷新,以便更新图片框的位置?

【问题讨论】:

  • 什么是连接线形?您可以发布一些可以重现此行为的代码吗?无论如何,尝试在下降后致电Me.Invalidate(true)(指定一个区域,如果它闪烁太多)。或刷新表单(更多闪烁)。我不太确定您的问题/背景是什么,所以...
  • 解决了这个问题。线形末端在设计时跳过了位于 Form1 上的默认图片框,这些图片框在运行时设置为不可见。所以我基本上过滤了添加的新图片框的名称,它解决了这个问题。线形是无需自定义图形命令即可在表单上绘制的线条;它们是 Microsoft VBPowerPacks ShapeControls 的一部分。

标签: vb.net picturebox ghost-blog


【解决方案1】:

是的,您需要创建继承面板/图片框类的自定义类,并且在构造函数级别您需要说 me.doublebuffered=true 以防止拖动图片框/面板的阴影

此外,在鼠标移动事件中的代码中,您需要从光标坐标中减去面板的当前坐标,以使图像靠近光标

【讨论】:

  • 我已经做了减法,因为,是的,如果没有,控件的 X,Y 将跟不上鼠标的 e.X 和 e.Y。不确定 Me.DoubleBuffered=True,因为我从未使用过它——所以试一试。我通常对数据表和数据网格使用双缓冲。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-15
  • 1970-01-01
  • 1970-01-01
  • 2017-03-20
  • 1970-01-01
  • 2011-08-30
  • 1970-01-01
相关资源
最近更新 更多