如果您使用Windows Vista或更高版本,您可能已经看到了这种工具提示,带有彩色文本和图标:
我使用各种关键字搜索,例如资源管理器,Aero,Windows,工具提示,并没有遇到任何有关如何实现此目的的有用信息。
最好,我希望解决方案适用于WinForms。有人有运气吗?
答案 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: