¿Alguien me puede indicar una buena implementación de un TextBox de Windows Forms básico que mostrará inicialmente texto de marca de agua que desaparece cuando el cursor entra? Creo que puedo crear el mío con un uso creativo de los eventos Enter y Leave, pero estoy seguro de que hay una implementación perfectamente utilizable en algún lugar. Vi la implementación de WPF y, si es necesario, pude anidarla, pero un derivado de WinForms TextBox nativo sería mejor.Watermark TextBox en WinForms
Tengo esto hasta ahora; aún no lo he probado, pero ¿alguien ve problemas evidentes?
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) //the change came from outside
TextColor = ForeColor;
}
protected override void OnLeave(EventArgs e)
{
base.OnLeave(e);
if (HasText) return;
isInTransition = true;
ForeColor = WatermarkColor;
Text = WatermarkText.EmptyIfNull();
isInTransition = false;
}
}
EDIT: Lo anterior habría finalmente trabajado con algunos finessing, pero el CueProvider trabajado mucho mejor. Aquí está mi implementación final:
public class WatermarkTextBox:TextBox
{
private string watermarkText;
public string WatermarkText
{
get { return watermarkText; }
set
{
watermarkText = value;
if (watermarkText.IsNullOrBlank())
CueProvider.ClearCue(this);
else
CueProvider.SetCue(this, watermarkText);
}
}
}
Podría haber integrado la funcionalidad CueProvider por completo, pero esto funciona muy bien.
Una marca de agua es una imagen o patrón en el papel que las etiquetas de forma única de que el papel (llamado una marca de agua digital de fuera del papel). Una bandera de señal es el término para lo que está describiendo. – Tergiver
De la respuesta eliminada de Jay Riggs: Pruebe [CueProvider] (http://www.codeproject.com/kb/edit/cueprovider.aspx) –