Сэм Макрилл, спасибо за ваш ответ, отличная идея использовать тег, чтобы узнать, какой контроль вы оставляете. Однако вам все еще нужен флаг IsShown согласно ответу BobbyShaftoe. Если мышь находится не в том месте, если под ней появляется всплывающая подсказка, она может запустить другое событие MouseMove (даже если вы не двигали мышь физически). Это может вызвать нежелательную анимацию, так как всплывающая подсказка постоянно исчезает и появляется снова.
Вот мой код:
private bool toolTipShown = false;
private void TimeWorks_MouseMove(object sender, MouseEventArgs e)
{
var parent = sender as Control;
if (parent == null)
{
return;
}
var ctrl = parent.GetChildAtPoint(e.Location);
if (ctrl != null)
{
if (ctrl.Visible && toolTip1.Tag == null)
{
if (!toolTipShown)
{
var tipstring = toolTip1.GetToolTip(ctrl);
toolTip1.Show(tipstring.Trim(), ctrl, ctrl.Width / 2, ctrl.Height / 2);
toolTip1.Tag = ctrl;
toolTipShown = true;
}
}
}
else
{
ctrl = toolTip1.Tag as Control;
if (ctrl != null)
{
toolTip1.Hide(ctrl);
toolTip1.Tag = null;
toolTipShown = false;
}
}
}