c#: TextBox添加水印效果(PlaceHolderText)

基于他人代码修改,不闪,以做备忘。

与SendMessage EM_SETCUEBANNER消息相比,它能改变字体绘制颜色,EM_SETCUEBANNER只限定了DimGray颜色,太深

    //与SendMessage EM_SETCUEBANNER消息相比,它能改变字体绘制颜色,EM_SETCUEBANNER只限定了DimGray颜色,太深
    [ToolboxBitmap(typeof(TextBox))]
    public class TextBoxEx : TextBox
    {
        private const int WM_PAINT = 0xF;
        private Color placeHolderColor = Color.Gray;
        private string placeHolderText;

        [DefaultValue("")]
        [Localizable(true)]
        [Editor("System.ComponentModel.Design.MultilineStringEditor, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", typeof(UITypeEditor))]
        public string PlaceHolderText
        {
            get { return this.placeHolderText; }
            set
            {
                this.placeHolderText = value;
                Invalidate();
            }
        }

        protected override void WndProc(ref Message m)
        {
            base.WndProc(ref m);
            if (m.Msg == WM_PAINT)
                WmPaint(ref m);
        }

        private void WmPaint(ref Message m)
        {
            if (!string.IsNullOrEmpty(this.Text) || string.IsNullOrEmpty(this.placeHolderText) || Focused)
                return;

            using (var g = Graphics.FromHwnd(this.Handle))
            {
                var flag = TextFormatFlags.EndEllipsis;
                //它反着来
                if (RightToLeft == RightToLeft.Yes)
                {
flag |= TextFormatFlags.RightToLeft;
if (TextAlign == HorizontalAlignment.Left) flag |= TextFormatFlags.Right; else if (TextAlign == HorizontalAlignment.Right) flag |= TextFormatFlags.Left; } else { switch (TextAlign) { case HorizontalAlignment.Center: flag |= TextFormatFlags.HorizontalCenter; break; case HorizontalAlignment.Right: flag |= TextFormatFlags.Right; break; default: break; } } var r = this.ClientRectangle; r.Offset(-1, 1); TextRenderer.DrawText( g, this.placeHolderText, Font, r, this.placeHolderColor, flag ); } } }

 

效果如图:

 

参考资料:

C# WinForm TextBox添加水印效果 - ZCoding - 博客园

转载于:https://www.cnblogs.com/crwy/p/10595308.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值