文章开始之前,先看下效果图:
那么这个是如何实现的,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,用于填写提示信息,当焦点获得或者失去时,将触发事件。
将该代码,写好后编译,将会在“工具箱”中出现这个组件:
将该组件拖入您想要使用的地方,然后设置如下属性:
如此,便可以实现开篇的效果图。
祝您用餐愉快。