任何人都可以指向一个基本的Windows窗体TextBox的良好实现,它最初会显示水印文本,当光标进入时它会消失吗?我想我可以通过创造性地使用Enter和Leave事件来创建我自己的东西,但我确信在某个地方有一个完全可用的实现.我看到了WPF实现,如果有必要,我可以嵌套它,但原生的WinForms TextBox派生会更好.
到目前为止,我有这个; 尚未尝试过,但有没有人看到任何明显的问题?
public class WatermarkTextBox:TextBox
{
public string WatermarkText { get; set; }
public Color WatermarkColor { get; set; }
private Color TextColor { get; set; }
private bool isInTransition;
public WatermarkTextBox()
{
WatermarkColor = SystemColors.GrayText;
}
private bool HasText { get { return Text.IsNotNullOrBlankOr(WatermarkText); }}
protected override void OnEnter(EventArgs e)
{
base.OnEnter(e);
if (HasText) return;
isInTransition = true;
ForeColor = TextColor;
Text = String.Empty;
isInTransition = false;
}
protected override void OnForeColorChanged(EventArgs e)
{
base.OnForeColorChanged(e);
if (!isInTransition) …Run Code Online (Sandbox Code Playgroud) 我正在研究一个C#winforms应用程序(VS.NET 2008,.NET 3.5 sp 1).我在表单上有一个搜索字段,而不是在搜索字段旁边有一个标签,我想在搜索字段本身的背景中显示一些灰色文本(例如,"搜索字词").当用户开始在搜索字段中输入文本时,文本应该消失.我怎样才能做到这一点?
我想知道如何为表单中的两个不同文本框创建"提示"?
这是我的代码:
Imports System.Runtime.InteropServices
Form_Load事件:
SendMessage(Me.txtAmount.Handle, &H1501, 0, "$X.XX")
SendMessage(Me.txtMemo.Handle, &H1501, 0, "Enter a transaction memo.")
Run Code Online (Sandbox Code Playgroud)
共享功能:
<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
Run Code Online (Sandbox Code Playgroud)
此代码仅适用于txtAmount文本框.知道如何让两个工作在一个表单?
谢谢.