Winform工具提示位置设置

3
我在想是否有可能通过MouseHover事件,在空白桌面的固定点之外定位ToolTip弹出窗口,当然,如果该事件对ToolTip有用的话。或者是否有其他方式可以实现这个目标。请注意,我不是要求如何显示另一个表单来实现此目的。请保留HTML标记。

你想创建一个全局的点击事件处理程序吗?因为除非你构建/使用一个,否则鼠标点击在你的程序之外是不起作用的。 - undefined
你是如何尝试显示工具提示的并不清楚。最好添加一些代码来展示你是如何显示它的,这样其他用户就可以尝试解决位置问题了。 - undefined
@EpicKip 你好,我已经修改了上面的错误。我想要在文本框或表单上使用鼠标悬停事件弹出工具提示,无论是在应用程序窗体旁边还是在大小为800x300且固定位置的空白桌面上,与鼠标箭头位置无关。 - undefined
@Reza Aghaei 你好,我在VS属性中找到了ToolTip的设置,例如弹出延迟值等。我没有任何代码。 - undefined
2个回答

13
您可以使用以下任一选项:
  1. 自己处理显示和隐藏 ToolTip。您可以使用 MouseHover 在所需位置显示 ToolTip,并使用 MouseLeave 将其隐藏。

  2. 使用 Windows API 方法 MoveWindow,强制工具提示显示在特定位置而不是默认位置。

选项 1

您可以处理控件的 MouseHoverMouseLeave 事件,并以特定位置的桌面窗口中的方式显示 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

作为我先前提供的另一个选项,用于对齐控件和工具提示的右边缘,您可以将ToolTipOwnerDraw属性设置为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);
}

1
听起来你最终想要的是一个框来显示一些信息,每当你在GUI上悬停在某些特定的项目上时。你还说你希望信息在固定位置显示。
与使用工具提示实现这个目标相反,我会采取以下步骤:
1. 创建一些固定的标签或文本框来显示信息,并将其放置在Windows表单的某个位置。 2. 创建一个鼠标悬停事件的订阅者。 3. 基于鼠标悬停事件中的发送者(你正在悬停的控件),选择在固定位置显示什么信息。
我曾经看到有人在其他程序中这样做...以RealTerm为例。如果你想尝试一下并了解感觉如何,可以试试这个解决方案。
另一方面,如果你必须使用工具提示来实现这个目标。你可以使用ToolTip.Show的重载来选择位置。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接