VB登录表单文本框失焦后恢复placeholder占位符问题求助
解决方案
问题原因
- 仅实现了用户名输入框的占位符逻辑,密码输入框的点击、失焦事件未做对应处理
- 仅绑定
Click事件触发清空逻辑,无法覆盖用户通过Tab键切换进入输入框的场景,会导致默认占位符未清空的问题 - 空值判断缺少去空格处理,容易出现用户输入空格后删除残留空白,导致空值判断失效的情况
修正后完整代码
Private Sub Form_Load() ' 初始化两个输入框的默认占位符 txt_username.Value = "Username" txt_password.Value = "Password" End Sub ' 用户名输入框获得焦点时清空默认值 Private Sub txt_username_GotFocus() If Trim(txt_username.Value) = "Username" Then txt_username.Value = "" End If End Sub ' 用户名输入框失焦时恢复占位符 Private Sub txt_username_LostFocus() If Trim(txt_username.Value) = "" Then txt_username.Value = "Username" End If End Sub ' 密码输入框获得焦点时清空默认值 Private Sub txt_password_GotFocus() If Trim(txt_password.Value) = "Password" Then txt_password.Value = "" ' 若需要隐藏密码输入内容,可开启下方密码掩码配置 ' txt_password.PasswordChar = "*" End If End Sub ' 密码输入框失焦时恢复占位符 Private Sub txt_password_LostFocus() If Trim(txt_password.Value) = "" Then txt_password.Value = "Password" ' 恢复占位符时取消密码掩码,避免占位符显示为星号 ' txt_password.PasswordChar = "" End If End Sub
优化说明
- 将原有的
Click事件替换为GotFocus事件,覆盖所有输入框获得焦点的场景,不管是鼠标点击还是键盘Tab切换都能正常触发清空逻辑 - 增加
Trim()函数去除输入内容前后的空白字符,解决删除内容后残留空格导致占位符不恢复的问题 - 补充了密码输入框的完整逻辑,额外增加了密码掩码的可选配置,避免占位符显示为密文的问题
内容的提问来源于stack exchange,提问作者Tom TK
相关产品推荐
相关产品推荐

