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

Я хочу, чтобы подсказка следовала за моей мышью, перемещающейся по одному элементу управления. Например, давайте возьмем панель. Когда местоположение мыши находится внутри прямоугольника (100, 100, 50, 50), я хочу, чтобы всплывающая подсказка была видимой и всегда находилась справа внизу мыши. Когда он находится за пределами этого прямоугольника, я хочу, чтобы всплывающая подсказка была невидимой.

Я пытался сделать это так:

ToolTip toolTip = new ToolTip();
int x, y;

protected override void OnMouseMove(MouseEventArgs e)
{
      if ((x == e.X) && (y == e.Y) && (new Rectangle(100, 100, 50, 50).Contains(e.Location))
          toolTip.Show("some text", this, x + 10, y + 10);
      else
      {
          x = e.X;
          y = e.Y;
          toolTip.Hide(this);
      }
}

Но есть проблема - когда моя всплывающая подсказка появляется - она ​​получает фокус, и после этого OnMouseMove (MouseEventArgs e) больше не работает. Я пытался сфокусироваться на панели в конце этой функции, но она не работает. Я также попробовал некоторые приемы с OnMouseHover, но это был тот же эффект.

1 Ответ

3 голосов
/ 01 сентября 2011

Не используйте для этого всплывающую подсказку - если панель нарисована, нарисуйте свою собственную подсказку; в противном случае используйте Panel и отвечайте на события MouseMove от обоих, но игнорируйте e.Location и вместо этого используйте System.Windows.Forms.Cursor.Position и PointToClient.

...