📜  如何在 TextBox vb.net 中创建提示、占位符文本、水印 (1)

📅  最后修改于: 2023-12-03 14:52:35.263000             🧑  作者: Mango

如何在 TextBox vb.net 中创建提示、占位符文本、水印

在 VB.Net 中,我们可以通过一些技术手段来在 TextBox 控件中创建提示、占位符文本和水印。这些文本主要用于给用户提供输入的提示信息,或者占用空白文本框的显示,给用户一些交互体验。

下面介绍三种方法来实现这些效果:

1. 提示信息

提示信息用于引导用户在文本框中输入什么内容。我们可以通过 TextChanged 事件来实现这个功能,当用户开始输入时,提示信息会自动消失。

Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
    If TextBox1.Text = String.Empty Then
        TextBox1.Text = "请输入用户名"
        TextBox1.ForeColor = Color.Gray
    ElseIf TextBox1.Text = "请输入用户名" Then
        TextBox1.Text = String.Empty
        TextBox1.ForeColor = Color.Black
    End If
End Sub

以上代码中,当用户开始输入时,触发 TextBox1 的 TextChanged 事件,如果文本框中没有内容,则将提示信息 "请输入用户名" 显示在文本框中,并将字体颜色设置为灰色;如果文本框中已经有提示信息并被选中,则清空文本框并将字体颜色设置为黑色。

2. 占位符文本

占位符文本用于在文本框中占用一部分空白区域,给用户显示一些固定的文本。我们可以通过在文本框中设置 Watermark 属性来实现占位符文本的效果。

Imports System.Runtime.InteropServices

Public Class WatermarkTextBox
    Inherits TextBox

    Private Const EM_SETCUEBANNER As Integer = &H1501

    Private _watermarkText As String

    Public Property WatermarkText As String
        Get
            Return _watermarkText
        End Get
        Set(ByVal value As String)
            _watermarkText = value
            UpdateWatermark()
        End Set
    End Property

    Protected Overrides Sub OnHandleCreated(e As EventArgs)
        MyBase.OnHandleCreated(e)
        UpdateWatermark()
    End Sub

    Private Sub UpdateWatermark()
        If IsHandleCreated AndAlso WatermarkText IsNot Nothing Then
            NativeMethods.SendMessage(Handle, EM_SETCUEBANNER, 0, WatermarkText)
        End If
    End Sub

    Private Class NativeMethods
        <DllImport("user32.dll", CharSet:=CharSet.Auto)>
        Public Shared Function SendMessage(hwnd As IntPtr, msg As Integer, wParam As Integer, <MarshalAs(UnmanagedType.LPWStr)> lParam As String) As IntPtr
        End Function
    End Class
End Class

使用自定义的 WatermarkTextBox 控件,可以方便地设置占位符文本,示例如下:

Dim watermarkTextBox1 As New WatermarkTextBox()
watermarkTextBox1.WatermarkText = "请输入搜索内容"
3. 水印文本

水印文本主要是为了给用户一些提示,并不会在文本框中消失。我们可以通过更改文本框的字体和背景颜色来实现水印文本的效果。

Private Sub TextBox1_Enter(sender As Object, e As EventArgs) Handles TextBox1.Enter
    If TextBox1.Text = "水印文本" Then
        TextBox1.Text = String.Empty
        TextBox1.ForeColor = Color.Black
    End If
End Sub

Private Sub TextBox1_Leave(sender As Object, e As EventArgs) Handles TextBox1.Leave
    If TextBox1.Text.Trim() = String.Empty Then
        TextBox1.Text = "水印文本"
        TextBox1.ForeColor = Color.Gray
    End If
End Sub

以上代码中,当文本框获得焦点时,判断文本框中的内容是否为水印文本,如果是,则清空文本框的内容,并将字体颜色设置为黑色;当文本框失去焦点时,判断文本框中的内容是否为空,如果是,则将水印文本显示在文本框中,并将字体颜色设置为灰色。

这三种方法可以帮助你在 VB.Net 中创建提示、占位符文本和水印。你可以根据实际需求选择合适的方法来改善用户体验。