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