转自:C#中TextBox水印提示的简单实现
例:
网上的实现方案基本上都是类似的,自己写一个类来继承TextBox
,添加一个Label
到TextBox
中,
如这篇 http://blog.csdn.net/sqshine/article/details/3648965
对于我仅需要两个TextBox
有提示信息或者说登陆界面中仅一个Combobox
和一个TextBox
需要提示信息的情况来说,总感觉有点小题大做,而且界面已经画好了,不愿再动的懒人来说,这太麻烦
于是下面是我简单的实现,符合我的要求:
- 界面上放一个
Combobox
和一个TextBox
,name分别为cbUser
和tbPwd
- 在
cbUser
和tbPwd
上再分别放一个Label,name分别为labelUser
和labelPwd
,Text为输入用户名
和输入密码
-
在LoginForm.cs中添加一个事件处理方法
private void textChanged(object sender, EventArgs e) { if (sender.Equals(cbUser)) { labelUser.Visible = cbUser.Text.Length < 1; } else if (sender.Equals(tbPwd)) { labelPwd.Visible = tbPwd.Text.Length < 1; } }
-
最后,将
cbUser
和tbPwd
的TextChanged
事件设置为上面的textChanged
方法
完工!!
这样得到的效果是:
- 登陆界面输入框内容为空时,有上述截图中的提示效果(label可见)
- 只要登陆界面输入框中有输入字符,就不会出现提示(label不可见)
感谢情若天_RunUp的提醒,上面的实现存在一个问题,鼠标如果点中的如果是label的部分,那么焦点是不在textbox里面的,可能会带来误解,看来还是上面提到的类继承`TextBox`来实现的方式比较通用。
下面本文的一个补救措施,两个Label的Click事件处理,已经违背了简单原则了,-_-b
private void label_Click(object sender, EventArgs e)
{
if (sender.Equals(labelUser))
{
cbUser.Focus();
}
else if (sender.Equals(labelPwd))
{
tbPwd.Focus();
}
}