在开始阅读本文之前,如果您有学习创建自定义控件库并在其他项目中引用的需求,请参考:

在Visual Studio中创建自定义Winform控件库并在其他解决方案中引用https://blog.csdn.net/YMGogre/article/details/126508042


目录

1、应用场景:

2、所需资源:

3、源代码:

4、使用方法:

5、效果演示:


1、应用场景:

  • 当我们需要文本框中有提示性文字告诉用户应当在当前文本框内输入何种内容时;比方说常见的密码栏会有诸如“请输入密码”这类提示性的文字:

2、所需资源:

(无,本质上就只是个 Label + TextBox 的组合控件,继承自 TextBox 类)

3、源代码:

(有一些方法注释掉了,小伙伴们有额外功能需求的话可以按需取消一些代码注释)

/* WatermarkTextBox.cs */using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;//注意命名空间修改为自己项目的命名空间
namespace WindowsFormsControlLibraryMadeByXJY
{public partial class WatermarkTextBox : TextBox{private readonly Label lblwaterText = new Label();public WatermarkTextBox(){InitializeComponent();lblwaterText.BorderStyle = BorderStyle.None;lblwaterText.Enabled = false;lblwaterText.BackColor = Color.White;lblwaterText.AutoSize = true;lblwaterText.Left = 2;lblwaterText.FlatStyle = FlatStyle.System;lblwaterText.Font = this.Font;lblwaterText.TextAlign = ContentAlignment.BottomLeft;Controls.Add(lblwaterText);}public override string Text{set{lblwaterText.Visible = value == string.Empty;base.Text = value;}get{return base.Text;}}/// <summary>/// 重写"控件上的 Size 属性值更改"事件处理方法/// </summary>/// <param name="e"></param>protected override void OnSizeChanged(EventArgs e){if (Multiline && (ScrollBars == ScrollBars.Vertical || ScrollBars == ScrollBars.Both))lblwaterText.Width = Width - 20;elselblwaterText.Width = Width;//lblwaterText.Height = Height - 2;lblwaterText.Top = (Height - lblwaterText.Height) / 2;base.OnSizeChanged(e);}/// <summary>/// 重写"文本改变"事件处理方法/// </summary>/// <param name="e"></param>protected override void OnTextChanged(EventArgs e){//当base控件(TextBox)文本为空时,显示水印文字文本;不为空则不显示lblwaterText.Visible = base.Text == string.Empty;    base.OnTextChanged(e);}/// <summary>/// 重写"鼠标指针在控件上方并按下鼠标按钮"事件处理方法/// </summary>/// <param name="e"></param>//protected override void OnMouseDown(MouseEventArgs e)//{//    if(e.Button == MouseButtons.Left)//    {//        lblwaterText.Visible = false;//        base.OnMouseDown(e);//    }//}/// <summary>/// 重写"鼠标离开控件的可见部分"事件处理方法/// </summary>/// <param name="e"></param>//protected override void OnMouseLeave(EventArgs e)//{//    lblwaterText.Visible = base.Text == string.Empty;//    base.OnMouseLeave(e);//}/// <summary>/// 重写"控件成为该窗体的活动控件"事件处理方法/// </summary>/// <param name="e"></param>//protected override void OnEnter(EventArgs e)//{//    lblwaterText.Visible = false;//    base.OnEnter(e);//}/// <summary>/// 重写"控件不再是窗体的活动控件"事件处理方法/// </summary>/// <param name="e"></param>//protected override void OnLeave(EventArgs e)//{//    if (string.IsNullOrEmpty(base.Text))//        lblwaterText.Visible = true;//    base.OnLeave(e);//}[Category("扩展属性"), Description("显示的水印文字提示信息")]public string WaterText{get { return lblwaterText.Text; }set { lblwaterText.Text = value; }}[Category("扩展属性"), Description("水印文字的左上角相对于文本框左上角的坐标")]public Point WaterMarkLocation{get { return lblwaterText.Location; }set { lblwaterText.Location = value; }}[Category("扩展属性"), Description("水印文字字体")]public Font WaterMarkFont{get { return lblwaterText.Font; }set { lblwaterText.Font = value; }}}
}
/* WatermarkTextBox.Designer.cs */using System.Runtime.CompilerServices;//注意命名空间修改为自己项目的命名空间
namespace WindowsFormsControlLibraryMadeByXJY
{partial class WatermarkTextBox{/// <summary> /// 必需的设计器变量。/// </summary>private System.ComponentModel.IContainer components = null;/// <summary> /// 清理所有正在使用的资源。/// </summary>/// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>protected override void Dispose(bool disposing){if (disposing && (components != null)){components.Dispose();}base.Dispose(disposing);}#region 组件设计器生成的代码/// <summary> /// 设计器支持所需的方法 - 不要修改/// 使用代码编辑器修改此方法的内容。/// </summary>private void InitializeComponent(){this.SuspendLayout();this.ResumeLayout(false);}#endregion}
}

4、使用方法:

  • 水印文本框控件提供了三项可修改的扩展属性:

  1. WaterMarkFont:设置水印文字字体;
  2. WaterMarkLocation:设置水印Label左上角相对于文本框左上角的坐标;
  3. WaterText:设置水印文字的文本;

5、效果演示:

Winform自定义控件 —— 水印文本框相关推荐

  1. WinForm -- 为TextBox文本框添加鼠标右键菜单

    WinForm -- 为TextBox文本框添加鼠标右键菜单 1. 新建一个WinForm项目,放置一个TextBox控件 2. 从工具箱拖进来一个ContextMenuStrip 3. 将TextB ...

  2. VS2010 winform中的文本框怎样设置为只读状态

    在用C#编写winform时,我们常常需要用文本框来显示一些东西,可是当客户使用时,可能会在文本框里面输入一些东西,就有可能会影响程序的运行,那我们是否可以将文本框设为只读状态,使其不能输入?答案是肯 ...

  3. C#WinForm多行文本框

    修改普通TextBox的属性: WordWrap 文本框中的文本是否自动换行,如果是 True,则自动换行,如果是 False,则不能自动换行 改为true Multiline 指定文本框是否为多行文 ...

  4. tkinter向文本框里加内容_给tkinter文本框添加右键菜单

    给tkinter文本框添加右键菜单 需求:直接右键点击使用tkinter创建的文本框是不会弹出菜单的.我们需要实现右键点击tkinter框架下的Entry对象.Text对象后弹出右键菜单可复制.粘贴和 ...

  5. c# winform 设置winform进入窗口后在文本框里的默认焦点

    http://www.cnblogs.com/JuneZhang/archive/2011/04/19/2020585.html 进入窗口后默认聚焦到某个文本框,两种方法: ①设置tabindex 把 ...

  6. WPF 给文本框TextBlock以及密码框PassWord加背景水印实现用户登录提示

    WPF 给文本框TextBlock以及密码框PassWord加背景水印实现用户登录提示 最近在学WPF写一个登录界面,遇到了一个给文本框和密码框加水印的问题,部分解决方案与网上的有所不同.直接来效果: ...

  7. C# Winform开发 弹出式输入框 文本框

    这个组件在Microsoft.VisualBasic中,可以直接调用这句话,然后提示会提醒你然后点击就可以添加这个命名空间了. 在WInform中使用的实例: string str = Interac ...

  8. wxPython自定义控件:特殊的文本框TextCtrl

    前言 wxPython ,Python 的优秀的图形用户界面开发包,可以实现的功能自然不少.但是,总免不了需要自定义控件,以实现更好的外观或更丰富的功能. 这篇文章,为了界面的美观,实现了一个仅带有下 ...

  9. 2021-11-18 WinFrom面试题 Winform中,怎么实现Form2中点击打开按钮,打开Form1,输入文本,再点击Form1中的“确定”按钮,把输入的值显示到Form2的文本框中?

    Winform中,怎么实现Form2中点击打开按钮,打开Form1,输入文本,再点击Form1中的"确定"按钮,把输入的值显示到Form2的文本框中? 首先自定义一个事件参数Tex ...

最新文章

  1. zabbix监控防火墙和交换机
  2. Charles笔记-配置Charles代理抓取HTTP和HTTPS数据包,安卓模拟器连接Charles
  3. MediaWiki/升级
  4. 每天进步一点点《ML - 支持向量机》
  5. bzoj2539: [Ctsc2000]丘比特的烦恼
  6. java token 生成_生成 Token
  7. 获取当前的格林尼治时间
  8. java计算机毕业设计html5大众汽车网站MyBatis+系统+LW文档+源码+调试部署
  9. iOS 字体类型列表
  10. GB、Gb、MB、Mb知识扫盲
  11. 从牛顿定律到飞行器动力学
  12. R语言XLSX数据导入
  13. 什么是“沙箱”技术?
  14. 解密支付系统,来看如何构建理想的支付系统架构
  15. 十大老牌黑客之:米特尼克
  16. 怎么把paper快快读了
  17. 金蝶EAS GUI客户端进入SQL语句执行页面方法
  18. 手写数字识别网络结构
  19. PRML第七章稀疏核机 (RVM)
  20. cmw500自动化测试软件,CMW500:蓝牙模块射频与音频测试的多标准解决方案-测试测量-与非网...

热门文章

  1. 读书笔记-柒-《腾讯网UED体验设计之旅》
  2. 行式数据库评测:Oracle 11g R2企业版
  3. 通过模拟实验脚本还原阿里巴巴的四个苦逼小朋友抢购月饼现场
  4. 微信彩色字体图标的使用
  5. php中reset是什么意思,reset是什么意思
  6. 【WORD】单词分栏
  7. SubstancePainter关联unity
  8. PreScan快速入门到精通第二十八讲PreScan中常用传感器之TIS传感器
  9. 详解微信「看一看」多模型内容策略与召回
  10. MultiSim电路仿真之受控源的使用