C#窗体Winform,文本框TextBox如何实现类似html的PlaceHolder属性

文章开始之前,先看下效果图:

C#窗体Winform,文本框TextBox如何实现类似html的PlaceHolder属性_第1张图片

那么这个是如何实现的,Winform自带的TextBox是不具备这种PlaceHolder提示功能的,要实现它,我们就需要重写TextBox控件。

具体代码如下:

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace RevitDevelopment.CustomControls
{
    /// 
    /// 带有PlaceHolder的Textbox
    /// 
    /// marc
    public class PlaceHolderTextBox : TextBox
    {
        private bool _isPlaceHolder = true;
        private string _placeHolderText;
        /// 
        /// 提示文本
        /// 
        public string PlaceHolderText
        {
            get { return _placeHolderText; }
            set
            {
                _placeHolderText = value;
                SetPlaceholder();
            }
        }

        /// 
        /// 文本
        /// 
        public new string Text
        {
            get
            {
                return _isPlaceHolder ? string.Empty : base.Text;
            }
            set
            {
                base.Text = value;
            }
        }

        /// 
        /// 构造函数
        /// 
        public PlaceHolderTextBox()
        {
            GotFocus += RemovePlaceHolder;
            LostFocus += SetPlaceholder;
        }

        /// 
        /// 当焦点失去的时候,将清空提示文本
        /// 
        private void SetPlaceholder()
        {
            if (string.IsNullOrEmpty(base.Text))
            {
                base.Text = PlaceHolderText;
                this.ForeColor = Color.Gray;
                this.Font = new Font(this.Font, FontStyle.Italic);
                _isPlaceHolder = true;
            }
        }

        /// 
        /// 当焦点获得的时候,将显示提示文本
        /// 
        private void RemovePlaceHolder()
        {
            if (_isPlaceHolder)
            {
                base.Text = "";
                this.ForeColor = SystemColors.WindowText;
                this.Font = new Font(this.Font, FontStyle.Regular);
                _isPlaceHolder = false;
            }
        }

        /// 
        /// 失去焦点
        /// 
        /// 
        /// 
        private void SetPlaceholder(object sender, EventArgs e)
        {
            SetPlaceholder();
        }

        /// 
        /// 获得焦点
        /// 
        /// 
        /// 
        private void RemovePlaceHolder(object sender, EventArgs e)
        {
            RemovePlaceHolder();
        }
    }
}

代码是简单明了的,它提供了属性PlaceHolderText,用于填写提示信息,当焦点获得或者失去时,将触发事件。

将该代码,写好后编译,将会在“工具箱”中出现这个组件:

C#窗体Winform,文本框TextBox如何实现类似html的PlaceHolder属性_第2张图片

将该组件拖入您想要使用的地方,然后设置如下属性:

C#窗体Winform,文本框TextBox如何实现类似html的PlaceHolder属性_第3张图片

如此,便可以实现开篇的效果图。

 

祝您用餐愉快。

你可能感兴趣的:(Winform)