【问题标题】:Windows Explorer/Aero style tooltips in C#?C# 中的 Windows 资源管理器/Aero 样式工具提示?
【发布时间】:2011-03-27 04:16:39
【问题描述】:

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

我使用各种关键字进行搜索,例如Explorer、Aero、Windows、工具提示,并没有遇到任何有关如何实现此目的的有用信息。

我希望该解决方案适用于 WinForms。有没有人运气好?

【问题讨论】:

  • 哦,有图标吗?那时我不知道(假设您使用的是 WinForms)。

标签: c# winforms tooltip


【解决方案1】:

wyDay 这个blog post 有解决办法。

它链接到名为“.NET 中的外壳样式拖放”的 3 部分系列:

第 3 部分中链接的存档不再可用,但似乎有其内容的副本here。请注意,为了编译,您可能需要将 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;;虽然我目前不明白& 的用途是什么,所以有人可能会帮助我。除此之外,似乎文本放置类型不会显示描述工具提示。

否则,我肯定对此非常满意。

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

【讨论】:

  • 酷 - 感谢分享信息。我怀疑“e.AllowedAffect &”是一个位掩码,用于传递 e.Effect 对事件链中的下一个处理程序有效这一事实。
【解决方案2】:

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

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

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

资源 WPF:

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

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

资源 WinForms:

【讨论】:

  • 最好是 WinForms,因为我不想同时加载两者,特别是因为 WPF 应用程序似乎需要更长的时间来加载。
  • 我认为没有办法设置内置工具提示的样式。我正在编辑我的主要帖子。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-22
  • 2012-06-23
  • 2015-02-19
  • 1970-01-01
相关资源
最近更新 更多