【发布时间】:2011-03-27 04:16:39
【问题描述】:
如果您使用 Windows Vista 或更高版本,您可能已经看到过这种带有彩色文本和图标的工具提示:
我使用各种关键字进行搜索,例如Explorer、Aero、Windows、工具提示,并没有遇到任何有关如何实现此目的的有用信息。
我希望该解决方案适用于 WinForms。有没有人运气好?
【问题讨论】:
-
哦,有图标吗?那时我不知道(假设您使用的是 WinForms)。
如果您使用 Windows Vista 或更高版本,您可能已经看到过这种带有彩色文本和图标的工具提示:
我使用各种关键字进行搜索,例如Explorer、Aero、Windows、工具提示,并没有遇到任何有关如何实现此目的的有用信息。
我希望该解决方案适用于 WinForms。有没有人运气好?
【问题讨论】:
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;;虽然我目前不明白& 的用途是什么,所以有人可能会帮助我。除此之外,似乎文本放置类型不会显示描述工具提示。
否则,我肯定对此非常满意。
希望这对解决此问题的任何人也有帮助。
【讨论】:
您想使用哪种技术? WPF 还是 WinForms?如果您使用 WPF,您可以使用 Popup 控件实现自己的工具提示,并自己实现自定义工具提示。
您必须将工具提示弹出窗口附加到鼠标移动事件并将控件相对于鼠标光标放置。
此方法只需要很少的工作,您可以使用 WPF 提供的所有内容(图像、动画等)自定义工具提示。
资源 WPF:
也许 WinForms 有一个类似控件的弹出窗口。自己实现一个也不应该很难。
看看如何在不使用设计器的情况下在 WinForms 中定位控件(确保您的控件位于所有其他控件之上)。如果您通过鼠标移动事件将其位置粘合到鼠标光标上,那么您就完成了。
资源 WinForms:
【讨论】: