我在想是否有可能通过MouseHover事件,在空白桌面的固定点之外定位ToolTip弹出窗口,当然,如果该事件对ToolTip有用的话。或者是否有其他方式可以实现这个目标。请注意,我不是要求如何显示另一个表单来实现此目的。请保留HTML标记。
自己处理显示和隐藏 ToolTip
。您可以使用 MouseHover
在所需位置显示 ToolTip
,并使用 MouseLeave
将其隐藏。
使用 Windows API 方法 MoveWindow
,强制工具提示显示在特定位置而不是默认位置。
选项 1
您可以处理控件的 MouseHover
和 MouseLeave
事件,并以特定位置的桌面窗口中的方式显示 ToolTip
:
private void control_MouseHover(object sender, EventArgs e)
{
var control = (Control)sender;
var text = toolTip1.GetToolTip(control);
if (!string.IsNullOrEmpty(text))
toolTip1.Show(text, control, control.PointToClient(new Point(100, 100)));
}
private void control_MouseLeave(object sender, EventArgs e)
{
var control = (Control)sender;
toolTip1.Hide(control);
}
选项2
作为我先前提供的另一个选项,用于对齐控件和工具提示的右边缘,您可以将ToolTip
的OwnerDraw
属性设置为true
,并处理控件的Draw
事件,并使用MoveWindow
Windows API方法将ToolTip
移动到所需位置:
[System.Runtime.InteropServices.DllImport("User32.dll")]
static extern bool MoveWindow(IntPtr h, int x, int y, int width, int height, bool redraw);
private void toolTip1_Draw(object sender, DrawToolTipEventArgs e) {
e.DrawBackground();
e.DrawBorder();
e.DrawText();
var t = (ToolTip)sender;
var h = t.GetType().GetProperty("Handle",
System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
var handle = (IntPtr)h.GetValue(t);
var location = new Point(100,100);
MoveWindow(handle, location.X, location.Y, e.Bounds.Width, e.Bounds.Height, false);
}