2011-03-14 113 views
0

我想在我的Windows窗体使用c#的文本框中使用水印?如何使用水印System.Windows.Forms.TextBox使用C#?

我在盒子里发现了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方法或建议我使用任何其他(简单)的方式来使用水印。

+5

这是很漂亮的车,试试这个:http://stackoverflow.com/questions/4902565/watermark-textbox-in-winforms/4902969#4902969 – 2011-03-14 18:20:33

+0

@Hans。谢谢。我明白了.. +1 – User13839404 2011-03-14 20:12:59

+0

感谢您的评论投票。创造了我的一天。 – 2011-03-14 20:19:02

回答

0

您只需在您的项目中添加一个带有此代码的UserControl。 WatermarkTextBox应该出现在你的工具箱的某个地方。将它放在任何需要水印文本框而不是普通旧文本框的窗体上,设置WatermarkText属性,如果代码良好,则应该准备好去。

5

你必须创建一个新类TextBoxWatermarkExtensionMethod到您的项目后,您可以使用该方法SetWatermark(string watermarkText)textbox

+0

我需要使用TextBox的HandleCreated事件像这样:'txtVerificationCode.HandleCreated + =(sender,e)=> txtVerificationCode.SetWatermark( “在这里粘贴验证码”);' – Jaex 2015-05-26 15:59:42

0

SetWatermark是文本框的扩展方法,所以上任何地方,其中WatermarkTextBox类添加您的命名空间可以使用SetWatermark方法传递要应用在诸如文本框的水印字符串:

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

SetWatermark不会像设计者文本框的公共财产可见,但形成你的代码可被访问就像任何的巴尔的TextBox对象的方法。