【转】C#: 带有背景文本的TextBox

来源:互联网 发布:数控车床g73编程实例 编辑:程序博客网 时间:2024/04/30 07:28

原文: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系统登录界面上的文本框一样的效果