0

我们有一个包含多个文本框的用户表单,我们希望构建类似于下面链接图像的内容,以显示用户应在每个文本框中输入的内容:

http://d2o0t5hpnwv4c1.cloudfront.net/426_formsBestPractices/comments.png

一旦用户开始输入,“默认”文本就会消失(而不是一旦用户“登陆”文本框内的光标。

此外,如果在文本框中没有输入任何内容,则不会提交默认文本并使用空白。

这可以做到吗?

任何建议将不胜感激。

4

2 回答 2

2

我可以问一下为什么您希望用户更改文本后默认文本消失,而不是在他们进入文本框后消失?

这不是大多数用户所期望的,我认为这对某些人来说会有些混乱,因此不推荐。用户很可能会在输入新文本之前尝试删除旧文本,从而产生额外的工作。

我会使用这样的东西:

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

上面的例子只是一个带有两个文本框和一个命令按钮的用户窗体。在文本框内单击将清除默认文本。如果用户没有输入任何内容,单击另一个文本框或控件将导致添加回默认文本。单击命令按钮后,如果保留默认文本,代码将返回空白。

于 2012-01-18T20:24:00.460 回答
1

对的,这是可能的 :)

我为您创建了一个示例。你可以在这里下载。

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
于 2012-01-18T17:40:38.163 回答