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

上記の例は、2つのテキストボックスと1つのコマンドボタンを備えた単純なユーザーフォームです。テキストボックス内をクリックすると、デフォルトのテキストがクリアされます。ユーザーが何も入力しない場合、別のテキストボックスまたはコントロールをクリックすると、デフォルトのテキストが追加されます。コマンドボタンがクリックされると、デフォルトのテキストが残っている場合、コードは空白を返します。

于 2012-01-18T20:24:00.460 に答える
1

はい、可能です:)

サンプルを作成しました。こちらからダウンロードできます。

http://wikisend.com/download/143478/Sample.xlsm

秘訣は、2つの類似したテキストボックスを作成し、ダミーのテキストボックスの後ろに「元の」テキストボックスを非表示にすることです(「デフォルトのテキストはどれですか」)

ダミーの入力を開始すると、テキストは実際には非表示のテキストボックスに入力されます。

また、値を取得するときは、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 に答える