Winform自定义控件 —— 水印文本框

这篇具有很好参考价值的文章主要介绍了Winform自定义控件 —— 水印文本框。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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


目录

1、应用场景: 

2、所需资源: 

3、源代码: 

4、使用方法: 

5、效果演示:


1、应用场景: 

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

winform textbox 水印,# Winform用户自定义控件库,microsoft,c#,visual studio

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;
            else
                lblwaterText.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、使用方法: 

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

winform textbox 水印,# Winform用户自定义控件库,microsoft,c#,visual studio

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

5、效果演示:

winform textbox 水印,# Winform用户自定义控件库,microsoft,c#,visual studio文章来源地址https://www.toymoban.com/news/detail-787357.html

到了这里,关于Winform自定义控件 —— 水印文本框的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C#winform自定义Trackbar控件实例

    本篇讲解自定义Trackbar控件实例,我们项目开发中为了保持项目界面的风格的一致性,需要自定义Trackbar控件,系统自带的控件样式不能更改,无法满足需求。 先看效果     实现过程 创建winform项目,添加组件类控件     修改名称,点击添加控件 添加两个自定义类  

    2024年02月12日
    浏览(32)
  • Winform自定义控件与自定义属性的简单使用

    Winform自定义控件和属性的学习  最近新文章:C#Winform批量获取CSV内容展示,并保存 目录 一、自定义控件的使用 1.在Winform程序中添加新建项,选择Windows窗体用户控件 2.拖拽使用自定义控件到主窗体中 注意点① : 二、自定义控件的自定义属性 1.在自定义控件中添加一个控件

    2023年04月15日
    浏览(30)
  • 手把手教你在winform中将文本或文件路径拖到控件中

    我们在winform开发中经常有这类需求:我们需要将文件,比如txt文件的所有内容复制到 RichTextBox控件上,或者需要将txt文件的某一行内容移动到 RichTextBox控件上,这些功能是怎么实现的呢?请接着往下看。 本人2017年硕士毕业,行业经验六年+,一直在自动化行业从事上位机软件

    2024年02月09日
    浏览(40)
  • 【Winform学习笔记(五)】引用自定义控件库(dll文件)

    在本文中主要介绍 如何引用自定义控件库(dll文件)。 通过生成解决方案 或 重新生成解决方案 生成 dll 文件 生成的 dll 文件在 bin 文件夹下的 Debug 文件夹中 点击工具-选择工具箱项 点击浏览 找到刚刚生成的 dll 文件 点击命名空间,确认要导入的控件 点击确定 这时在引用中是

    2024年02月14日
    浏览(33)
  • 在Winform分页控件中集成保存用户列表显示字段及宽度调整设置

    在Winform的分页控件里面,我们提供了很多丰富的功能,如常规分页,中文转义、导出Excel、导出PDF等,基于DevExpress的样式的分页控件,我们在其上面做了不少封装,以便更好的使用,其中就包括集成保存用户列表显示字段及宽度调整设置。本篇随笔介绍这个实现的过程,通过

    2024年02月03日
    浏览(31)
  • 【入门级图文教程】在Visual Studio中创建自定义Winform控件库并在其他解决方案中引用

    目录 本教程使用到的相关软件或产品: 教程正文:         创建用户控件库:         添加自定义控件项:         在其他解决方案中引用: Windows 10 专业版        10.0.19044 Microsoft Visual Studio Community 2022 (64 位)  版本17.3.2 「.NET 桌面开发」工作负荷(在开始菜单

    2024年02月10日
    浏览(38)
  • C#控件编程详解之文本框(TextBox)

    摘要:以自身开发经验,从属性与事件详解文本框(TextBox)的用法。 编程语言:C# 编程环境:Visual Studio 2019 目录 TextBox控件属性  布局 设计 外观 行为  TextBox控件事件  小结  每篇寄语         TextBox提供文字输入和显示功能,应用广泛,随处可见,作为一个Winform开发者,

    2024年02月16日
    浏览(32)
  • 界面控件DevExpress WinForm——属于WinForm组件的MVVM框架

    DevExpress WinForm拥有180+组件和UI库,能为 Windows Forms 平台创建具有影响力的业务解决方案。 DevExpress WinForm 能完美构建流畅、美观且易于使用的应用程序,无论是Office风格的界面,还是分析处理大批量的业务数据,它都能轻松胜任! 注意 :DevExpress WinForm v22.2已经正式发布,新版

    2023年04月09日
    浏览(37)
  • 【WinForm详细教程五】WinForm中的MenuStrip 、ContextMenuStrip 、ToolStrip、StatusStrip控件

    MenuStrip 作为一个容器可以包含多个菜单项。 MenuStrip 的重要属性包括: Name :菜单的名字 Dock :菜单的停靠位置 Items :菜单项的集合 ToolStripMenuItem ToolStripMenuItem 是 MenuStrip 中的菜单项,可以有以下属性和功能: ShortcutKeys :为菜单项设置快捷键,例如 Alt+F , Ctrl+N 等 DropDown

    2024年02月04日
    浏览(42)
  • C# Winform Label 控件

    目录 一、概述 二、基本用法 1.控件内容显示 2.控件的外观 3.自定义控件的大小 4.控件的内边距  5.设置文本的固定位置 6.控件的事件 结束 Label 控件是 winform 开发中最常用的一个控件,一般用做显示文本,也有时用做打开链接等操作。 新建一个 winform 项目,点击 form1 界面,

    2024年02月09日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包