2012-08-09 159 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對象。