转自:C#中TextBox水印提示的简单实现

 

本文转自:
原作者: js2854
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

 

例:

网上的实现方案基本上都是类似的,自己写一个类来继承TextBox,添加一个LabelTextBox中,

如这篇 http://blog.csdn.net/sqshine/article/details/3648965

对于我仅需要两个TextBox有提示信息或者说登陆界面中仅一个Combobox和一个TextBox需要提示信息的情况来说,总感觉有点小题大做,而且界面已经画好了,不愿再动的懒人来说,这太麻烦

于是下面是我简单的实现,符合我的要求

  • 界面上放一个Combobox和一个TextBox,name分别为cbUsertbPwd
  • cbUsertbPwd上再分别放一个Label,name分别为labelUserlabelPwd,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;
        }
    }
    复制代码
  • 最后,将cbUsertbPwdTextChanged事件设置为上面的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();
            }
        }
 
posted @ 2016-08-10 19:14  寒夜美美  阅读(2256)  评论(0编辑  收藏  举报