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);

        }

    }

}

 

你可能感兴趣的:(WinForm)