C#中的Windows资源管理器/ Aero样式工具提示?

时间:2011-03-27 04:16:39

标签: c# winforms tooltip

如果您使用Windows Vista或更高版本,您可能已经看到了这种工具提示,带有彩色文本和图标:

enter image description here

我使用各种关键字搜索,例如资源管理器,Aero,Windows,工具提示,并没有遇到任何有关如何实现此目的的有用信息。

最好,我希望解决方案适用于WinForms。有人有运气吗?

2 个答案:

答案 0 :(得分:8)

wyDay上的这个blog post有解决方案。

它链接到一个名为“在.NET中使用Shell样式拖放”的3部分系列:

第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;;虽然我目前不了解&的用途,但有人可能会帮助我。除此之外,似乎文本删除类型不会显示描述工具提示。

否则,我对此非常满意。

希望这也有助于解决此问题的任何人。

答案 1 :(得分:4)

您想使用哪种技术? WPF还是WinForms?如果您使用WPF,则可以使用Popup控件实现自己的工具提示,并自行实现自定义工具提示。

您必须将工具提示弹出窗口附加到鼠标移动事件,并将控件相对于鼠标光标放置。

此方法只需要很少的工作量,您可以使用WPF提供的所有内容自定义工具提示 - 图像,动画等。

资源WPF:

也许WinForms有一个类似控件的弹出窗口。自己实施一个也不应该很难。

看看如何在不使用设计器的情况下在WinForms中定位Control(确保您的控件位于所有其他控件之上)。如果你通过鼠标移动事件将这个胶水定位到鼠标光标,你就完成了。

资源WinForms: