如何使用MouseMove事件在面板中移动Label?

时间:2011-11-17 19:03:05

标签: .net delphi mouseevent panel delphi-prism

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

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

我得到了它的工作,但它的位置完全转移,当你移动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建议的那样,我修改了代码,但标签仍然显示在框外,如下图所示。

myimage

谢谢,

1 个答案:

答案 0 :(得分:4)

我不知道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);
}