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

  • 相关阅读:
    uva 10280(欧拉函数)
    uva 11121(-2进制)
    uva 10673(扩展欧几里德)
    uva 106(勾股定理)
    uva 128(简单题)
    Codeforces Round #238 (Div. 1) 解题报告
    2018(1)系统分析/需求分析
    2015(1)进度管理/时间管理
    序列图
    [转贴] 软件测试职业发展的 A 面和 B 面
  • 原文地址:https://www.cnblogs.com/crwy/p/10595308.html
Copyright © 2011-2022 走看看