algo que ha funcionado para mí:
this.waterMarkActive = true;
this.textBox.ForeColor = Color.Gray;
this.textBox.Text = "Type here";
this.textBox.GotFocus += (source, e) =>
{
if (this.waterMarkActive)
{
this.waterMarkActive = false;
this.textBox.Text = "";
this.textBox.ForeColor = Color.Black;
}
};
this.textBox.LostFocus += (source, e) =>
{
if (!this.waterMarkActive && string.IsNullOrEmpty(this.textBox.Text))
{
this.waterMarkActive = true;
this.textBox.Text = "Type here";
this.textBox.ForeColor = Color.Gray;
}
};
Dónde bool waterMarkActive
es una variable miembro de la clase y textBox
es el TextBox
. Esto probablemente debería ser encapsulado :) Podrían haber algunos problemas con este enfoque, pero actualmente no estoy al tanto de ninguno.
Recientemente he descubierto que las marcas de agua de soporte de Windows en los cuadros de texto; se les llama pancartas de referencia (ver here).Es muy fácil de implementar:
// Within your class or scoped in a more appropriate location:
[DllImport("user32.dll")]
private static extern IntPtr SendMessage(IntPtr hWnd, int Msg, int wParam, [MarshalAs(UnmanagedType.LPWStr)] string lParam);
// In your constructor or somewhere more suitable:
SendMessage(textBox.Handle, 0x1501, 1, "Please type here.");
Dónde textBox
es una instancia de TextBox
, 0x1501
es el código para el mensaje de ventanas EM_SETCUEBANNER
, la wParam
pueden ser o bien TRUE
(distinto de cero) o FALSE
(cero), y lParam
es la marca de agua que te gustaría mostrar wParam
indica cuándo se debe mostrar el letrero; si se establece en TRUE
, el letrero de cue aparecerá incluso cuando el control tenga foco.
es esto ASP.NET o formularios de Windows? – M4N
¿En qué tecnología está interesado? es ASP.NET, winforms o WPF, y tal vez Silverlight? De cualquier manera se llama "Cuadro de texto de marca de agua" y puede encontrar montones en cada una de las tecnologías. – Shimmy
WinForms. - Ah, no sabía ese término. ¡Gracias! – mafu