2012-08-09 166 views
2

我注册了热键:Ctrl + 空间。热键消息被发送到:如何在当前鼠标位置设置工具提示?

private void Hotkey_press() 
{ 
... // I want to show tooltip "Hello" at current mouse location. 
} 

有什么办法来显示此提示,甚至鼠标犯规指向任何控制,这是我Window.Form1之外?

编辑:那工具提示可以显示连形式失去重心或隐藏

回答

8

你想要的东西,像

ToolTip tt = new ToolTip(); 
IWin32Window win = this; 
tt.Show("String", win, mousePosition); 

MousePosition可以从MouseEventArgs通过

private SomeMouseEventHandler(object sender, MouseEventArgs e) 
{ 
    System.Drawing.Point mousePosition = e.Location; 
    ... 
} 
获得

或使用

System.Drawing.Point mousePosition = Cursor.Position; 

也,则可能需要设置被显示的量,ToolTip更长的持续时间,以及只使用为Show方法中可用的过载,tt.Show("String", win, mousePosition, 5000);将显示工具提示5秒钟。

我希望这会有所帮助。

+0

谢谢。它帮助我,而我的表格正在关注。如果我的Form1隐藏,不活动,则此ToolTip tt不显示。有什么方法可以显示它,即使Form1.Hide()? – Sakura 2012-08-09 14:53:40

+1

如果窗体隐藏,则不显示“ToolTip”... – MoonKnight 2012-08-09 16:09:07

+2

-1,因为这只有在表单处于焦点状态时才有效。此外,'MousePosition'需要转换为客户端坐标,像'this.PointToClient(MousePosition)' – Setsu 2015-03-12 21:00:14

3
+0

谢谢。它在Form1处于活动状态时起作用。是否有任何方法来显示这个Tooltip甚至Form1.Hide()? – Sakura 2012-08-09 14:56:16

+0

设置ShowAlways属性,看我的更新 – 2012-08-09 15:20:49

+0

我测试了它,但当Form1失去焦点时,它没有工作 – Sakura 2012-08-09 15:31:44

2

作为this answer表明,有做到这一点没有管理办法。如果你想在你的程序没有对焦的时候显示一个工具提示控件,那么“正确”的方法是使用PInvoke Win32并使用CreateWindowEx。 Gideon给出的上面的答案显示了一些关于如何去做的指示,但是它非常复杂。

如果您不介意使用第三方库,AutoIt提供了一种轻松创建工具提示而无需亲自处理Win32的方法。

这是一个很简单的例子演示如何使用:

//make sure AutoItX3.dll is referenced in your project 
using AutoItX3Lib; 

private AutoItX3 myAutoIt = new AutoItX3(); 

private async void ShowToolTipAtMouse(string message) 
{ 
    //default position is bottom right of mouse pointer, 
    //but you can set the x and y positions yourself 
    myAutoIt.ToolTip(message); 

    //call the function again with an empty argument to close 
    await Task.Delay(1000); 
    myAutoIt.ToolTip(String.Empty); 
} 

这将工作,只要你的程序是运行;如果它处于焦点之外或者甚至是隐藏的都没关系。缺点是你没有经常淡出动画(它只是消失)。另外,如果您需要同时使用多个工具提示,则需要具有多个AutoItX3对象。