網上的實現方案基本上都是類似的,自己寫一個類來繼承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(); } }