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

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

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值