Как переместить метку в панели с помощью события MouseMove? - PullRequest
1 голос
/ 17 ноября 2011

Я знаю, что это должно быть очень просто, особенно учитывая всю информацию и примеры кодов онлайн, но по какой-то причине я просто не могу заставить это работать.

У меня есть ярлык и панель на winform,Я хочу, чтобы метка следовала только за указателем мыши, когда она входит и перемещается внутри панели.

У меня все работает, но ее местоположение полностью смещено, и она всегда меняется при перемещении формы win.

Вот 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, я изменил код, но метка все еще отображается вне поля, так какизображение ниже показывает

1013 *myimage

Спасибо,

1 Ответ

4 голосов
/ 17 ноября 2011

Я не знаю 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);
}
...