2011-03-27 89 views
5

如果您使用的是Windows Vista或,你可能已經看到這樣的提示的,隨着彩色文本和圖標:C#中的Windows資源管理器/ Aero樣式工具提示?

enter image description here

我一直利用各種關鍵字搜索例如Explorer,Aero,Windows,工具提示,還沒有遇到任何有關如何實現這一目標的有用信息。

最好,我想解決方案爲WinForms。有沒有人有幸運?

+0

哦,帶圖標?那我就不知道了(假設你使用的是WinForms)。 – BoltClock 2011-03-27 04:25:26

回答

8

blog post上wyDay有解決方案。

它鏈接到一個3部分組成的系列稱爲 「殼牌風格拖放在.NET」:

第3個部分鏈接this archive,其中包含一大堆項目。請注意,爲了編譯,您可能需要將DragDropLib和WpfDragDropLib項目設置爲允許不安全的代碼。

裏面有樣品,但爲了方便起見,這裏是一個摘錄:

#region Drop target accepting FileDrop 

private void textBox2_DragEnter(object sender, DragEventArgs e) 
{ 
    if (e.Data.GetDataPresent(DataFormats.FileDrop)) 
    { 
     e.Effect = e.AllowedEffect & DragDropEffects.Copy; 
     DropTargetHelper.DragEnter(textBox2, e.Data, new Point(e.X, e.Y), e.Effect, "Copy to %1", "Here"); 
    } 
    else 
    { 
     e.Effect = DragDropEffects.None; 
     DropTargetHelper.DragEnter(textBox2, e.Data, new Point(e.X, e.Y), e.Effect); 
    } 
} 

private void textBox2_DragOver(object sender, DragEventArgs e) 
{ 
    if (e.Data.GetDataPresent(DataFormats.FileDrop)) 
     e.Effect = e.AllowedEffect & DragDropEffects.Copy; 
    else 
     e.Effect = DragDropEffects.None; 
    DropTargetHelper.DragOver(new Point(e.X, e.Y), e.Effect); 
} 

private void textBox2_DragLeave(object sender, EventArgs e) 
{ 
    DropTargetHelper.DragLeave(textBox2); 
} 

private void textBox2_DragDrop(object sender, DragEventArgs e) 
{ 
    if (e.Data.GetDataPresent(DataFormats.FileDrop)) 
     e.Effect = e.AllowedEffect & DragDropEffects.Copy; 
    else 
     e.Effect = DragDropEffects.None; 
    DropTargetHelper.Drop(e.Data, new Point(e.X, e.Y), e.Effect); 

    if (e.Effect == DragDropEffects.Copy) 
     AcceptFileDrop(textBox2, e.Data); 
} 

#endregion // Drop target accepting FileDrop 

從我的實驗,似乎我可以只寫e.Effect = DragDropEffects.Copy;代替e.Effect = e.AllowedEffect & DragDropEffects.Copy;;儘管我目前不明白&在那裏,所以有人可以幫助我。除此之外,文字放置類型似乎不會顯示說明工具提示。

否則,我對此肯定很滿意。

希望這可以幫助任何人解決這個問題。

+0

酷 - 感謝分享信息。我懷疑「e.AllowedAffect&」是一個位掩碼,它傳遞了e.Effect對事件鏈中下一個處理程序有效的事實。 – holtavolt 2011-04-14 18:05:46

4

您想使用哪種技術? WPF或WinForms?如果您使用WPF,則可以使用Popup控件實現自己的工具提示,並自己實施自定義工具提示。

您必須將您的工具提示彈出窗口附加到鼠標移動事件並將控件相對鼠標光標放置。

此方法只需要小的努力,您可以使用WPF的一切所提供的自定義工具提示 - 圖像,動畫等

資源WPF:

也許WinForms有一個類似控件的彈出窗口。自己實施一個也不應該很難。

看看如何在不使用設計器的情況下在WinForms中放置控件(確保您的控件位於所有其他控件之上)。如果您通過鼠標移動事件將此膠水粘貼到鼠標光標的位置,就完成了。

資源的WinForms:

+0

最好是WinForms,因爲我寧願沒有加載,尤其是因爲WPF應用似乎需要更長時間才能加載。 – unrelativity 2011-04-10 11:54:26

+0

我不認爲有一種方式來構建buildin工具提示。我正在編輯我的主帖。 – Zebi 2011-04-10 11:59:48

+0

也許這有助於:http://andrusdevelopment.blogspot.com/2007/10/implementing-custom-tooltip-in-c.html – Zebi 2011-04-10 12:43:47