【问题标题】:Detect if the Control was Moved inside the picturebox检测控件是否在图片框内移动
【发布时间】:2018-12-18 06:45:15
【问题描述】:

我已经向图片框添加了一个自定义控件。我需要检查该控件是否已被移动。 目前我使用的是pictureboxmousemove 事件,这显然有一些问题。 我也尝试将mousemouse 事件添加到控件中。它似乎不起作用。我该如何解决这个问题?

 pictureBox5.Controls.Clear();
 var c = new FrameControl();
 c.Size = obj.Size;
 c.Location = obj.Location;
 pictureBox5.Controls.Add(c);     

更新: 我尝试过覆盖 Frame Control 的 mousemove 事件,但它似乎不起作用。

protected override void OnMouseMove(MouseEventArgs e)
  {
 base.OnMouseMove(e);
//Debugger does not hit breakpoint
  }

【问题讨论】:

  • "...它似乎不起作用..." - 此信息并没有真正的帮助。它没有说明究竟是什么不起作用,即您是否在任何地方收到任何错误消息,您是否尝试调试问题以确保它确实完成了预期的事情。
  • 是什么让控件移动?默认情况下它不会移动,因此您的代码允许并使其移动。从那里分派一个事件怎么样?
  • @JohnB 请查看更新。
  • OnMouseMove 在鼠标指针在控件范围内移动时引发。这允许通过使用相对 e.Location 值更新控件的位置来移动控件。由于此 Control 移动受 Container 的 边界约束,因此您可以使用 something like this 计算移动(已经在其他地方提到过 :)。您的自定义控件应更新并存储其新位置,以便主过程可以在需要时检索此引用。
  • @ZorgoZ 这是我使用的控件stackoverflow.com/a/53774101/848968

标签: c# .net winforms system.drawing


【解决方案1】:

MouseMove 事件在您将鼠标悬停在控件上时调用。如果要检查控件是否被移动,请使用LocationChanged事件。

【讨论】:

  • 你也可以依赖Move事件。
  • 谢谢。 LocationChanged自定义控件吧?
  • 是的。您可以覆盖自定义控件的“LocationChanged”事件。
猜你喜欢
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
  • 2013-04-05
  • 1970-01-01
  • 1970-01-01
  • 2012-12-08
  • 2015-04-03
  • 1970-01-01
相关资源
最近更新 更多