【问题标题】:How to move Label within a panel using MouseMove event?如何使用 MouseMove 事件在面板内移动标签?
【发布时间】:2011-11-17 19:03:04
【问题描述】:

我知道这应该非常简单,尤其是考虑到所有在线信息和示例代码,但由于某种原因,我无法让它工作。

我在 winform 上有一个标签和一个面板。我希望标签在进入面板并在面板内移动时只跟随鼠标指针。

我让它工作了,但它的位置完全改变了,当你移动 winform 时它总是在改变。

这里是 MouseMove 和其他事件:

constructor MainForm;
begin
  InitializeComponent();
  label2.Visible:=false;
end;

method MainForm.panel1_MouseMove(sender: System.Object; e: System.Windows.Forms.MouseEventArgs);
begin
  //label2.Location := panel1.PointToScreen(e.Location);
  label2.Location := self.PointToScreen(e.Location);
  label2.Invalidate;
end;

method MainForm.panel1_MouseEnter(sender: System.Object; e: System.EventArgs);
begin
  label2.Visible:=true;
end;

method MainForm.panel1_MouseLeave(sender: System.Object; e: System.EventArgs);
begin
  label2.Visible:=false;
end;

更新按照 larstech 的建议,我修改了代码,但标签仍然显示在框外,如下图所示。

谢谢,

【问题讨论】:

  • Label是panel1的子控件吗?不太清楚。
  • @LarsTech 不,不是。标签在winform上,不在面板内。 Panel1 text 是包含文本“Panel1. 的标签

标签: .net delphi mouseevent panel delphi-prism


【解决方案1】:

我不知道delphi-prism,但不就是这样吗:

label2.Location := e.Location;

由于 Label 不是子控件,请尝试以下操作:

label2.Location := new Point(panel1.Left + e.Location.X, panel1.Top + e.Location.Y);

显然,我的语法可能不正确。

如果您只是想移动工具提示,这在 c# 中有效:

private ToolTip _tips = new ToolTip();

private void panel1_MouseMove(object sender, MouseEventArgs e) {
  _tips.Show("test", panel1, e.Location.X + 10, e.Location.Y + 10);
}

【讨论】:

  • 我将标签设为面板的子标签,现在它可以正常工作了,但我必须按住鼠标不放才能显示标签
  • @digitalanalog 更新了答案。我认为计时器可能会更好地工作,因为一旦鼠标经过标签,标签会导致面板的 MouseLeave 事件触发。您可以禁用标签,但随后它会被禁用。
  • 为什么每次 MouseEnter 触发时 MouseLeave 都会触发。这令人困惑。
  • 所有这些努力都是为了拥有一个简单的 ToolTip 或 Hint,就像他们以前在 Delphi for Win32 中一样。显然,ToolTip 文本仅在 ToolStripItems 中受支持。顺便说一句,当我将标签设置为面板的子级时,您的更新工作方式相同。所以,你的语法是正确的。
  • @digitalanalog 通过添加 c# ToolTip 示例更新答案。
猜你喜欢
  • 1970-01-01
  • 2014-09-18
  • 2014-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-04
  • 2014-06-26
  • 2021-01-30
相关资源
最近更新 更多