zoukankan      html  css  js  c++  java
  • 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 - 博客园

  • 相关阅读:
    linux基础
    1-1python自动化测试环境搭建及开发工具安装
    Linux常用命令
    049.NET5_中间件
    045.NET5_基本鉴权授权
    044.NET5_基于Session_Cookies认证
    042-043.NET5_ResultFilter以及双语言应用
    041.NET5_ExceptionFilter
    040.NET5_ExceptionFilter
    039.NET5_自定义Filter匿名
  • 原文地址:https://www.cnblogs.com/crwy/p/10595308.html
Copyright © 2011-2022 走看看