Quelque chose qui a fonctionné pour moi:
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;
}
};
Où bool waterMarkActive
est une variable membre de classe et textBox
est le TextBox
. Cela devrait probablement être encapsulé cependant :) Il pourrait y avoir quelques problèmes avec cette approche, mais je n'en connais actuellement aucun.
J'ai récemment découvert que Windows supporte les marques d'eau dans les zones de texte; ils sont appelés des bannières de repère (voir here).Il est très facile à mettre en œuvre:
// 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.");
Où textBox
est une instance de TextBox
, 0x1501
est le code du message Windows EM_SETCUEBANNER
, le wParam
peut être soit TRUE
(non nul) ou FALSE
(zéro), et lParam
est la marque d'eau que vous souhaitez afficher. wParam
indique quand la bannière cue doit être affichée; Si elle est définie sur TRUE
, la bannière de repère s'affiche même si la commande est active.
est ce formulaire ASP.NET ou Windows? – M4N
Quelle technologie vous intéresse? ASP.NET, Winforms ou WPF, et peut-être Silverlight? De toute façon, il est appelé "Watermark textbox" et vous pouvez trouver beaucoup sur chacune des technologies. – Shimmy
WinForms. - Ah, je ne savais pas ce terme. Merci! – mafu