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

C#中的Windows资源管理器/Aero样式工具提示?,c#,winforms,tooltip,C#,Winforms,Tooltip,如果您使用Windows Vista或更高版本,您可能已经看到过这种工具提示,带有彩色文本和图标: 我用不同的关键词搜索过,比如资源管理器、Aero、Windows、工具提示,但没有找到任何关于如何实现这一点的有用信息 最好,我希望解决方案是针对WinForms的。有人运气好吗?你想用哪种技术?WPF还是WinForms?如果使用WPF,您可以使用弹出控件实现自己的工具提示,并自己实现自定义工具提示 您必须将工具提示弹出窗口附加到鼠标移动事件,并将控件相对于鼠标光标放置 这种方法只需要很小的工

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

我用不同的关键词搜索过,比如资源管理器、Aero、Windows、工具提示,但没有找到任何关于如何实现这一点的有用信息


最好,我希望解决方案是针对WinForms的。有人运气好吗?

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

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

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

资源WPF:

也许WinForms有一个弹出式控件。自己实现一个也不应该很难

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

资源及表格:

    • 这一天有解决方案

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

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

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


      希望这也能帮助任何人解决这个问题。

      哦,有图标吗?我不知道这一点(假设你使用的是WinForms)。最好是WinForms,因为我不希望两个都加载,尤其是因为WPF应用程序似乎需要更长的加载时间。我不认为有一种方法可以设置构建工具提示的样式。我正在编辑我的主要帖子。也许这有帮助:酷-谢谢分享信息。我怀疑“e.allowedeffect&”是一个位掩码,用于将e.Effect有效的事实传递给事件链中的下一个处理程序。