【问题标题】:how to show highlighting arrows like in Coderush如何在 Coderush 中显示突出显示的箭头
【发布时间】:2019-02-24 04:00:17
【问题描述】:

我正在使用 c# 和 vb.net 编写 winforms。

我喜欢 coderush 中使用的箭头。

没有看过coderush箭头的朋友,请看这张图。


(来源:aspnetpro.com

@987654323@

我想在我的程序中有类似的东西。 唯一的区别是我将使用它来突出显示文本框和按钮。

我只想要箭头,箭头上的文字不重要。

所以也许我需要做一个通用功能,比如 DrawHighlightArrow(控件名)

它会设法在那个控件旁边画一个箭头

请提出一个在 C# 或 Vb.net 中解决此问题的好方法

谢谢
安娜

【问题讨论】:

  • 您使用什么 UI 技术?请通过重新标记并在您的问题中提及来澄清。
  • 您好 Kent,我正在制作一个 winform 应用程序。我有 VS2005 和 VS2008。我同时使用 c# 和 vb.net

标签: c# .net vb.net winforms


【解决方案1】:

覆盖 Form 上的 OnPaint 方法,并使用 PainteEventArgs.Graphics 属性中的对象上的DrawImage() 方法来绘制箭头的位图。

【讨论】:

  • 这引出了一个问题:哪个图形对象?箭头可能在视觉上跨越多个控件。我相信这是这个问题的核心。
  • 该评论是否适用于我的答案的最新版本 (501829)?
  • 嗨,Marxi,我会试试这个。非常感谢。
  • 这里的问题可能是文本框和按钮占用的绘制区域可能无法在绘制处理程序中绘制(剪辑的子项)/或将被这些子项擦除/重新绘制。
  • 可能需要子类化文本框控件。
【解决方案2】:

可以创建一个具有透明背景的自定义表单,使用 GDI+ 在其上绘制箭头(使用上述 marxidad 的技术,或者只需在其上放置一个 PictureBox 并处理 Paint 事件)。

然后只需在现有“父”表单的顶部实例化箭头表单的新实例(您可能希望将 TopMost 设置为 true)并启动 Timer 以将其淡出。

唯一需要注意的是……

  • 如果您过早关闭“父”表单,请正确清理,并且...
  • 将任何点击事件传递给“父”表单。

【讨论】:

    【解决方案3】:

    有一个非常棒的库,叫做 Locus Effects here。去看看吧,它完全符合你的要求。

    【讨论】: