📅  最后修改于: 2023-12-03 14:52:35.263000             🧑  作者: Mango
在 VB.Net 中,我们可以通过一些技术手段来在 TextBox 控件中创建提示、占位符文本和水印。这些文本主要用于给用户提供输入的提示信息,或者占用空白文本框的显示,给用户一些交互体验。
下面介绍三种方法来实现这些效果:
提示信息用于引导用户在文本框中输入什么内容。我们可以通过 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 事件,如果文本框中没有内容,则将提示信息 "请输入用户名" 显示在文本框中,并将字体颜色设置为灰色;如果文本框中已经有提示信息并被选中,则清空文本框并将字体颜色设置为黑色。
占位符文本用于在文本框中占用一部分空白区域,给用户显示一些固定的文本。我们可以通过在文本框中设置 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 = "请输入搜索内容"
水印文本主要是为了给用户一些提示,并不会在文本框中消失。我们可以通过更改文本框的字体和背景颜色来实现水印文本的效果。
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 中创建提示、占位符文本和水印。你可以根据实际需求选择合适的方法来改善用户体验。