原文:http://blog.163.com/chs1987@126/blog/static/68709178201110148542833/
我们经常会看到带有背景文本的TextBox,当焦点不在TextBox上时,显示背景文本,而当获得焦点时隐藏背景文本,例如Windows的登录是用户名的输入框。于是,就想自己做一个,结果发现其实很简单,只需继承TextBox,添加一个BackGroundText属性,并重载WM_PAINT消息处理函数即可。
废话不多说,直接上代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace ControlLib
{
public class TextBoxEx : TextBox
{
private const int WM_PAINT = 0x000F;
private string backGroundText = "";
[Description("BackGround Text")]
public string BackGroundText
{
get { return backGroundText; }
set { backGroundText = value; }
}
protected override void WndProc(ref Message m)
{
base.WndProc(ref m);
if (m.Msg == WM_PAINT)
{
using (Graphics g = CreateGraphics())
{
if (string.IsNullOrEmpty(Text) && !Focused)
{
SizeF size = g.MeasureString(backGroundText, Font);
//draw background text
g.DrawString(backGroundText, Font, Brushes.LightGray, new PointF(0, (Height - size.Height) / 2));
}
}
}
}
}
}
其实,还可以用这种方法在背景文本前面加上图标,再美化一下就可以做出和Win7系统登录界面上的文本框一样的效果