如何使用C#水印System.Windows.Forms.TextBox?

时间:2011-03-14 17:42:26

标签: c# winforms watermark

我想使用c#在我的Windows窗体的文本框中使用水印?

我在stackoverflow中找到了this link。但我真的无法弄清楚如何在我的Windows应用程序中使用。

class WatermarkTextBox : TextBox
{
    private const uint ECM_FIRST = 0x1500;
    private const uint EM_SETCUEBANNER = ECM_FIRST + 1;

    [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)]
    static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, uint wParam, [MarshalAs(UnmanagedType.LPWStr)] string lParam);

    private string watermarkText;
    public string WatermarkText
    {
        get { return watermarkText; }
        set
        {
            watermarkText = value;
            SetWatermark(watermarkText);
        }
    }

    private void SetWatermark(string watermarkText)
    {
        SendMessage(this.Handle, EM_SETCUEBANNER, 0, watermarkText);
    }       

}

请帮助如何使用SendMessage方法或建议我使用其他(简单)方法来使用水印。

3 个答案:

答案 0 :(得分:5)

您必须在项目中创建新的课程TextBoxWatermarkExtensionMethod,然后才能在textbox

上使用SetWatermark(string watermarkText)方法

答案 1 :(得分:0)

您只需在项目中添加带有此代码的UserControl。 WatermarkTextBox应该出现在您的工具箱中。将它放在您需要带水印文本框而不是普通旧文本框的表单上,设置WatermarkText属性,如果代码良好,您应该准备好了。

答案 2 :(得分:0)

SetWatermark是TextBox上的扩展方法,因此在添加了WatermarkTextBox类的命名空间的任何位置,您都可以使用SetWatermark方法传递要在TextBox上应用的水印字符串,如:

`myTextBox.SetWatermark("your water mark text here");`

SetWatermark在设计器上不会作为TextBox的公共属性显示,但是形成您的代码,就像TextBox对象的任何bult-in方法一样。