System.Windows.Forms.TextBox 中的水印

Posted

技术标签:

【中文标题】System.Windows.Forms.TextBox 中的水印【英文标题】:Watermark in System.Windows.Forms.TextBox 【发布时间】:2010-10-09 08:33:12 【问题描述】:

使用 C# 在 .Net 2.0 中为 System.Windows.Forms.TextBox 实现水印功能的最佳方法是什么?


编辑:

使用来自 CodeProject 的现成组件非常简单。它还具有 The Code Project Open License (CPOL)。

【问题讨论】:

“水印”的替代名称是“提示”。 水印又名提示文本又名占位符文本。相关帖子 - Watermark TextBox in WinForms & Watermark / hint text / placeholder TextBox & Adding placeholder text to textbox 【参考方案1】:

最近我需要一个水印文本框,我脑海中浮现的第一件事是文本框的 OnLeave 和 OnEnter 事件,但首先我用谷歌搜索它,我首先得到两个链接是 CodeProject 中使用 System.Drawing 命名空间的链接另一个是在这里使用 SendMessage() http://vidmar.net/weblog/archive/2008/11/05/watermarked-textbox-in-windows-forms-on-.net.aspx。

我相信 SendMessage 更容易,而且它也没有闪烁。虽然我用过。

希望对你有帮助。

【讨论】:

@Peymankh:谢谢 +1 和绿色复选标记。 SendMessage 更容易 Vidmar 使用补充说明:setting watermark = this.txtBoxA.SetWatermark("BOX"); * *需要参考 = 使用 System.ComponentModel;使用 System.Drawing;使用 System.Windows.Forms;使用 System.Runtime.InteropServices; 如何在windows应用中使用? 尝试了这种方法 (EM_SETCUEBANNER) 和 CodeProject 之一。 EM_SETCUEBANNER 唯一的缺点是你不能设置水印颜色,否则它会晃动。 codeproject 方法的缺点是 Peymankh 提到的闪烁,并且水印文本在您开始输入之前不会消失(不是焦点)。 我创建了一个小型 GitHub 存储库,其中显示了创建水印的所有方法。 github.com/akorb/PlaceholderTextBox【参考方案2】:

这并不像人们想象的那么简单。您需要使用 System.Drawing 命名空间并覆盖 OnPaint 事件。

这里有一些已经做过的人的链接。

Link & Link

【讨论】:

@BtBh:谢谢。第一个链接是我需要的。 +1 我同意这并不像您想象的那么简单。 我会推荐这个作为答案!

以上是关于System.Windows.Forms.TextBox 中的水印的主要内容,如果未能解决你的问题,请参考以下文章