热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

C#制作TextBox水印提示

前言在使用C#的TextBox控件时,有时候会有以下需求:在用户没有输入文字时,TextBox有提示文字,如下图所示
前言

在使用C#TextBox控件时,有时候会有以下需求:在用户没有输入文字时,TextBox有提示文字,如下图所示,下面将一步步的为大家介绍如何实现此功能。 



 

第一步:创建测试项目

  在VS中创建一个Windows窗体应用程序,命名为DemoTest

第二步:创建继承控件

  使用Visual C#可以通过继承创建功能强大的自定义控件。通过继承,可以创建不仅保留了标准Windows窗体控件的所有内在功能,而且还包含自定义功能的控件。一会儿,我们将创建一个名为WatermarkTextBox的简单继承控件。此控件将继承标准Windows窗体TextBox控件的功能,并实现文章开头提到的水印文字功能。   
  1.在项目DemoTest上右击,添加,用户控件。如图所示:  



   
  2.WatermarkTextBox.cs来命名。如图所示: 
    





  
 


  
3.WatermarkTextBox.cs上右击,选择查看代码。
 


  
 


  
4.找到代码中的public partialclass WatermarkTextBox : UserControl,并将此控件的继承类型从UserControl改成TextBox。这样我们创造的控件就可以继承TextBox控件的所有功能了。
 


  
 


  5.保存项目,右击项目名称DemoTest,点击生成。下面会报一个错误,双击这个错误提示,定位代码对应的位置,删除对应的那一行代码(如下所示),因为TextBox中没有此属性。

this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;

 
第三步:为添加的继承控件添加水印文字功能

  通过SendMessage发送EM_SETCUEBANNER消息,即可达到添加水印文字的效果。具体方法如下: 
   
  1.WatermarkTextBox.cs上右击,选择查看代码。 
   
  2.由于DllImportSystem.Runtime.InteropService命名控件下的一个属性类,因此需要在WatermarkTextBox.cs代码中添加应用命名空间:usingSystem.Runtime.InteropServices; 
   
  3.WatermarkTextBox.cs中添加下面的代码即可。

namespace Test

{

       public partial class WatermarkTextBox : TextBox

    {

        public WatermarkTextBox()

        {

            InitializeComponent();

        }

        private const uint ECM_FIRST = 0x1500;

        private const uint EM_SETCUEBANNER = ECM_FIRST + 1;


        [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)]

        static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, uint wParam, [MarshalAs(UnmanagedType.LPWStr)] string lParam);


        private string watermarkText;

        public string WatermarkText

        {

            get { return watermarkText; }

            set

            {

                watermarkText = value;

                SetWatermark(watermarkText);

            }

        }


        private void SetWatermark(string watermarkText)

        {

            SendMessage(this.Handle, EM_SETCUEBANNER, 0, watermarkText);

        }

    }

}

第四步:调用继承控件

  1.DemoTest上右击,点击重新生成。 
   
  2.双击Form1.cs,并将左面工具箱中的自定义控件:WatermarkTextBox控件拖进Form1.cs中。 


     

  3.拖进去的WatermarkTextBox其实就可以当正常的TextBox设置其属性:Name=txtUserName或者Name=txtPassword。惟一不同的是,这个TextBox控件的属性栏里多了一个属性:WatermarkTextBox,这个属性就是设置水印文字的,比如:你可以设置这个属性为:请输入用户名等。为了更好的看到效果,我们再添加一个Button控件, 将其属性TabIndex设置为0(初始光标所在位置)。点击启动,就看到如下效果了:
 
 


   

推荐阅读
  • 在 Flutter 开发过程中,开发者经常会遇到 Widget 构造函数中的可选参数 Key。对于初学者来说,理解 Key 的作用和使用场景可能是一个挑战。本文将详细探讨 Key 的概念及其应用场景,并通过实例帮助你更好地掌握这一重要工具。 ... [详细]
  • 主要用了2个类来实现的,话不多说,直接看运行结果,然后在奉上源代码1.Index.javaimportjava.awt.Color;im ... [详细]
  • 前言--页数多了以后需要指定到某一页(只做了功能,样式没有细调)html ... [详细]
  • 在维护公司项目时,发现按下手机的某个物理按键后会激活相应的服务,并在屏幕上模拟点击特定坐标点。本文详细介绍了如何使用ADB Shell Input命令来模拟各种输入事件,包括滑动、按键和点击等。 ... [详细]
  • 本文详细探讨了VxWorks操作系统中双向链表和环形缓冲区的实现原理及使用方法,通过具体示例代码加深理解。 ... [详细]
  • 使用 Azure Service Principal 和 Microsoft Graph API 获取 AAD 用户列表
    本文介绍了一段通用代码示例,该代码不仅能够操作 Azure Active Directory (AAD),还可以通过 Azure Service Principal 的授权访问和管理 Azure 订阅资源。Azure 的架构可以分为两个层级:AAD 和 Subscription。 ... [详细]
  • 在使用 DataGridView 时,如果在当前单元格中输入内容但光标未移开,点击保存按钮后,输入的内容可能无法保存。只有当光标离开单元格后,才能成功保存数据。本文将探讨如何通过调用 DataGridView 的内置方法解决此问题。 ... [详细]
  • 本文探讨了在不使用服务器控件的情况下,如何通过多种方法获取并修改页面中的HTML元素值。除了常见的AJAX方式,还介绍了其他可行的技术方案。 ... [详细]
  • 本文介绍了如何在C#中启动一个应用程序,并通过枚举窗口来获取其主窗口句柄。当使用Process类启动程序时,我们通常只能获得进程的句柄,而主窗口句柄可能为0。因此,我们需要使用API函数和回调机制来准确获取主窗口句柄。 ... [详细]
  • 本文探讨了 Objective-C 中的一些重要语法特性,包括 goto 语句、块(block)的使用、访问修饰符以及属性管理等。通过实例代码和详细解释,帮助开发者更好地理解和应用这些特性。 ... [详细]
  • 题目Link题目学习link1题目学习link2题目学习link3%%%受益匪浅!-----&# ... [详细]
  • ASP.NET MVC中Area机制的实现与优化
    本文探讨了在ASP.NET MVC框架中,如何通过Area机制有效地组织和管理大规模应用程序的不同功能模块。通过合理的文件夹结构和命名规则,开发人员可以更高效地管理和扩展项目。 ... [详细]
  • 本文详细探讨了JDBC(Java数据库连接)的内部机制,重点分析其作为服务提供者接口(SPI)框架的应用。通过类图和代码示例,展示了JDBC如何注册驱动程序、建立数据库连接以及执行SQL查询的过程。 ... [详细]
  • 毕业设计:基于机器学习与深度学习的垃圾邮件(短信)分类算法实现
    本文详细介绍了如何使用机器学习和深度学习技术对垃圾邮件和短信进行分类。内容涵盖从数据集介绍、预处理、特征提取到模型训练与评估的完整流程,并提供了具体的代码示例和实验结果。 ... [详细]
  • 本文探讨了在 Vue 2.0 项目中使用 Axios 获取数据时可能出现的错误,并提供详细的解决方案和最佳实践。 ... [详细]
author-avatar
王怡君3018
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有