有没有一种方法可以创建浅灰色文本,当文本框处于焦点时消失?
目前,我在文本框中写了文字,但我必须选择文本并手动删除它(有点烦人......)
我知道当我专注于盒子(使用事件)时我可以做某些事情但是,我不希望每次用户选择那个盒子时它都清除文本......而不是第一次。换句话说,我只是希望提示文本消失(如果他们在输入一次后选择框,则不会输入他们输入的文本)...
我也意识到我可以使用像计数器这样的东西来跟踪它是否是第一次点击这个盒子..但是,我正在寻找一种更清洁的方法来做到这一点......
答案 0 :(得分:3)
类似下面的代码。 请注意,这不是编译代码。只是分享想法,如果用户没有输入任何文本,您可能希望保留默认设置。对于那个处理失去焦点并重置为默认值。
public class FancyTextBox : TextBox{
private bool _isDefaultText;
public FancyTextBox(){
UpdateDefaultSettings(true);
}
protected override void OnGotFocus(EventArgs e)
{
base.OnGotFocus(e);
UpdateDefaultSettings(false);
}
protected override void OnLostFocus(EventArgs e)
{
base.OnLostFocus(e);
if (String.IsNullOrEmpty(Text))
{
//Retain Default Setting.
UpdateDefaultSettings(true);
}
}
private void UpdateDefaultSettings(bool isDefault){
_isDefaultText = isDefault;
if(_isDefaultText){
Text = "Please enter";
this.ForeColor= Color.Gray;
}
else{
Text = "";
ForeColor = Color.Black;
}
}
}
答案 1 :(得分:2)
更简单的答案是
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)]
private static extern IntPtr SendMessage(IntPtr hWnd, uint msg, uint wParam, [MarshalAs(UnmanagedType.LPWStr)] string lParam);
public static void SetHint(TextBox textBox, string hintText)
{
const uint EmSetCueBanner = 0x1501;
SendMessage(textBox.Handle, EmSetCueBanner, 0, hintText);
}