【发布时间】:2011-08-12 05:43:07
【问题描述】:
在我的应用程序中,我有一个用于输入用户名的文本框。如果文本为空,我想在同一文本框中以灰色显示“在此处输入用户名”。文本框是否有这样的属性。就像在 Firefox 浏览器中一样,如果 URL 字段为空,它将以灰色显示“转到网站”
谢谢
【问题讨论】:
标签: vb.net
在我的应用程序中,我有一个用于输入用户名的文本框。如果文本为空,我想在同一文本框中以灰色显示“在此处输入用户名”。文本框是否有这样的属性。就像在 Firefox 浏览器中一样,如果 URL 字段为空,它将以灰色显示“转到网站”
谢谢
【问题讨论】:
标签: vb.net
我知道这可能是一个旧线程,但我想我会回答它以防万一其他人偶然发现它。
首先声明如下(可能需要导入System.Runtime.InteropServices)
<DllImport("user32.dll", CharSet:=CharSet.Auto)> _
Private Shared Function SendMessage(ByVal hWnd As IntPtr, ByVal msg As Integer, ByVal wParam As Integer, <MarshalAs(UnmanagedType.LPWStr)> ByVal lParam As String) As Int32
End Function
然后调用以下命令(根据需要更改):
SendMessage(Me.textbox1.Handle, &H1501, 0, "Enter User name here")
【讨论】:
SendMessage(Me.textbox2.Handle, &H1501, 0, "Your second message here")。我建议创建一个新问题,并使用@Grahamvs 添加评论,以便我看到它。我还建议创建一个新类,从文本框继承,并在其中添加代码,因为这样可以更轻松地重用代码
假设您指的是 Windows 窗体,请查看 this question。
基本上,您需要使用EM_SETCUEBANNERvalue 为控件调用WinAPI SendMessage 函数。
【讨论】:
我真的很喜欢 CodeProject.com 的这个解决方案:http://www.codeproject.com/KB/edit/TextBoxHint.aspx?display=Print
真正好的是当用户在字段中输入他/她的文本时,光滑的淡出。它非常容易实现并且看起来很棒。
【讨论】:
你可以继承 TextBox 并覆盖 WndProc
Public Class TextBoxPlaceHolder
Inherits TextBox
Private Const WM_PAINT As Int32 = &HF
Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
MyBase.WndProc(m)
If m.Msg = WM_PAINT AndAlso Me.TextLength = 0 Then
Using g = Me.CreateGraphics
g.DrawString("Enter User name here", Me.Font, Brushes.Gray, 1, 1)
End Using
End If
End Sub
End Class
【讨论】:
Ivan 和 cardmagik 的工作很棒。 创建一个用户控件并使用以下代码。
Public Class RichTextBoxPlaceHolder
Inherits RichTextBox
Private Const WM_PAINT As Int32 = &HF
Private mstrHint As String = "Enter text"
Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
MyBase.WndProc(m)
If m.Msg = WM_PAINT AndAlso Me.TextLength = 0 Then
Using g = Me.CreateGraphics
g.DrawString(mstrHint, Me.Font, Brushes.Gray, 1, 1)
End Using
End If
End Sub
Public Property Hint() As String
Get
Return mstrHint
End Get
Set(ByVal value As String)
mstrHint = value
End Set
End Property
End Class
截图:
【讨论】:
尝试类似的方法:
(onkeyup)
If TextBox.Text = "" Then
TextBox.Text = "Enter username here..."
TextBox.ForeColor = <your chosen color here>
Else
TextBox.ForeColor = <normal color here>
End If
【讨论】:
Text 将把这个占位符作为 actual text 返回(你希望它返回 @ 987654323@)等。这样做有很多弊端。