C# WinForm TextBox添加水印效果

1、新建项目添加WatermarkTextBox类:

using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.Drawing;
using System.ComponentModel;

namespace TextBoxWatermark
{
    [ToolboxBitmap(typeof(TextBox))]
    public class WatermarkTextBox : TextBox
    {
        private string _emptyTextTip;
        private Color _emptyTextTipColor = Color.DarkGray;
        private const int WM_PAINT = 0xF;

        public WatermarkTextBox()
            : base()
        {
        }

        [DefaultValue("")]
        public string EmptyTextTip
        {
            get { return _emptyTextTip; }
            set
            {
                _emptyTextTip = value;
                base.Invalidate();
            }
        }

        [DefaultValue(typeof(Color), "DarkGray")]
        public Color EmptyTextTipColor
        {
            get { return _emptyTextTipColor; }
            set
            {
                _emptyTextTipColor = value;
                base.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)
        {
            using (Graphics graphics = Graphics.FromHwnd(base.Handle))
            {
                if (Text.Length == 0
                    && !string.IsNullOrEmpty(_emptyTextTip)
                    && !Focused)
                {
                    TextFormatFlags format =
                        TextFormatFlags.EndEllipsis |
                        TextFormatFlags.VerticalCenter;

                    if (RightToLeft == RightToLeft.Yes)
                    {
                        format |= TextFormatFlags.RightToLeft | TextFormatFlags.Right;
                    }

                    TextRenderer.DrawText(
                        graphics,
                        _emptyTextTip,
                        Font,
                        base.ClientRectangle,
                        _emptyTextTipColor,
                        format);
                }
            }
        }
    }
}

2、在Form中实例化控件并添加:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace TextBoxWatermark
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

            TextBoxWatermark.WatermarkTextBox tbName = new WatermarkTextBox();
            tbName.EmptyTextTip = "请输入你的账号";
            tbName.Location = new System.Drawing.Point(116, 63);
            tbName.Size = new System.Drawing.Size(150, 21);
            tbName.Name = "tbName";
            tbName.TabStop = false;
            //tbName.TabIndex = 0;
            this.Controls.Add(tbName);

            TextBoxWatermark.WatermarkTextBox tbPassword = new WatermarkTextBox();
            tbPassword.EmptyTextTip = "请输入你的密码";
            tbPassword.Location = new System.Drawing.Point(116, 90);
            tbPassword.Size = new System.Drawing.Size(150, 21);
            tbPassword.Name = "tbPassword";
            tbPassword.TabStop = false;
            //tbName.TabIndex = 0;
            this.Controls.Add(tbPassword);
        }
    }
}
原文地址:https://www.cnblogs.com/ZCoding/p/4269637.html