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 - 博客园

  • 相关阅读:
    canvas制作简单动画
    jQuery 2.2 和 1.12 新版本发布
    jquery实现简单鼠标经过图片预览效果
    js深入理解"闭包"
    js判断一个变量是否为数组的解决方案
    js+css:43种常见的浏览器兼容性问题大汇总
    js判断当前操作系统
    js判断是否微信浏览器打开
    h5connect.js 腾讯云视频点播使用指南
    Docker入门书籍
  • 原文地址:https://www.cnblogs.com/crwy/p/10595308.html
Copyright © 2011-2022 走看看