我们有一个包含多个文本框的用户表单,我们希望构建类似于下面链接图像的内容,以显示用户应在每个文本框中输入的内容:
http://d2o0t5hpnwv4c1.cloudfront.net/426_formsBestPractices/comments.png
一旦用户开始输入,“默认”文本就会消失(而不是一旦用户“登陆”文本框内的光标。
此外,如果在文本框中没有输入任何内容,则不会提交默认文本并使用空白。
这可以做到吗?
任何建议将不胜感激。
我们有一个包含多个文本框的用户表单,我们希望构建类似于下面链接图像的内容,以显示用户应在每个文本框中输入的内容:
http://d2o0t5hpnwv4c1.cloudfront.net/426_formsBestPractices/comments.png
一旦用户开始输入,“默认”文本就会消失(而不是一旦用户“登陆”文本框内的光标。
此外,如果在文本框中没有输入任何内容,则不会提交默认文本并使用空白。
这可以做到吗?
任何建议将不胜感激。
我可以问一下为什么您希望用户更改文本后默认文本消失,而不是在他们进入文本框后消失?
这不是大多数用户所期望的,我认为这对某些人来说会有些混乱,因此不推荐。用户很可能会在输入新文本之前尝试删除旧文本,从而产生额外的工作。
我会使用这样的东西:
Const sNameDefault As String = "Your Name Here"
Const sEmailDefault As String = "Your Email Here"
Private Sub UserForm_Initialize()
Me.TextBox1.Text = sNameDefault
Me.TextBox2.Text = sEmailDefault
CommandButton1.SetFocus
End Sub
'// TextBox1 - Name
Private Sub TextBox1_Enter()
With Me.TextBox1
If .Text = sNameDefault Then .Text = vbNullString
End With
End Sub
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
With Me.TextBox1
If .Text = vbNullString Then .Text = sNameDefault
End With
End Sub
'// TextBox2 - Email
Private Sub TextBox2_Enter()
With Me.TextBox2
If .Text = sEmailDefault Then .Text = vbNullString
End With
End Sub
Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
With Me.TextBox2
If .Text = vbNullString Then .Text = sEmailDefault
End With
End Sub
Private Sub CommandButton1_Click()
Dim sName As String, sEmail As String
'// Get Name
If Me.TextBox1.Text = sNameDefault Then
sName = vbNullString
Else
sName = Me.TextBox1.Text
End If
'// Get Email
If Me.TextBox2.Text = sEmailDefault Then
sEmail = vbNullString
Else
sEmail = Me.TextBox2.Text
End If
MsgBox ("Your Name: " & sName & vbNewLine & " Your Email:" & sEmail)
Unload Me
End Sub
上面的例子只是一个带有两个文本框和一个命令按钮的用户窗体。在文本框内单击将清除默认文本。如果用户没有输入任何内容,单击另一个文本框或控件将导致添加回默认文本。单击命令按钮后,如果保留默认文本,代码将返回空白。
对的,这是可能的 :)
我为您创建了一个示例。你可以在这里下载。
http://wikisend.com/download/143478/Sample.xlsm
诀窍是创建 2 个类似的文本框并将“原始”文本框隐藏在虚拟文本框后面(“哪个具有默认文本”)
当您开始输入虚拟对象时,文本实际上将输入到隐藏的文本框中。
当您拉取值时,只需从第二个文本框中拉取值,这样就不会考虑默认数据:)
希望这可以帮助。
使用的代码
Private Sub UserForm_Initialize()
TextBox1.SelStart = 0
TextBox1.SelLength = Len(TextBox1.Text)
End Sub
Private Sub CommandButton1_Click()
MsgBox TextBox2.Text
End Sub
Private Sub TextBox1_Change()
TextBox1.Visible = False
With TextBox2
.Text = Replace(TextBox1.Text, "Please enter your name", "")
.Visible = True
.SetFocus
.SelStart = Len(TextBox2.Text)
End With
End Sub