【C#】制作TextBox水印提示
来源:互联网 发布:ubuntu命令行模式 编辑:程序博客网 时间:2024/05/17 04:54
前言
在使用C#的TextBox控件时,有时候会有以下需求:在用户没有输入文字时,TextBox有提示文字,如下图所示,下面将一步步的为大家介绍如何实现此功能。
第一步:创建测试项目
在VS中创建一个Windows窗体应用程序,命名为DemoTest。
第二步:创建继承控件
使用Visual C#可以通过继承创建功能强大的自定义控件。通过继承,可以创建不仅保留了标准Windows窗体控件的所有内在功能,而且还包含自定义功能的控件。一会儿,我们将创建一个名为WatermarkTextBox的简单继承控件。此控件将继承标准Windows窗体TextBox控件的功能,并实现文章开头提到的水印文字功能。
1.在项目DemoTest上右击,添加,用户控件。如图所示:
2.以WatermarkTextBox.cs来命名。如图所示:
3.在WatermarkTextBox.cs上右击,选择查看代码。
4.找到代码中的public partial class WatermarkTextBox : UserControl,并将此控件的继承类型从UserControl改成TextBox。这样我们创造的控件就可以继承TextBox控件的所有功能了。
5.保存项目,右击项目名称DemoTest,点击生成。下面会报一个错误,双击这个错误提示,定位代码对应的位置,删除对应的那一行代码(如下所示),因为TextBox中没有此属性。
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
第三步:为添加的继承控件添加水印文字功能
通过SendMessage发送EM_SETCUEBANNER消息,即可达到添加水印文字的效果。具体方法如下:
1.在WatermarkTextBox.cs上右击,选择查看代码。
2.由于DllImport是System.Runtime.InteropService命名控件下的一个属性类,因此需要在WatermarkTextBox.cs代码中添加应用命名空间:using System.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(初始光标所在位置)。点击启动,就看到如下效果了:
实战登录
文本框水印效果一般出现在登录页面的情况比较多,所以做了一个登录的小例子,效果如图所示(源码下载):
参考资料:http://blog.csdn.net/heray1990/article/details/51180081
- 【C#】制作TextBox水印提示
- Winform界面设计之-TextBox水印提示
- 实现Winform的TextBox自带水印提示信息
- C#中TextBox水印提示的实现过程
- Winform 水印TextBox
- WPF 水印 TextBox MaskedTextBox
- 制作水印
- Winform 水印TextBox(近乎完美)
- asp.net 实现水印textbox
- asp.net textbox 水印效果
- 給TEXTBOX添加文字水印
- C# WINFORM TEXTBOX水印效果
- SilverLight TextBox水印效果实现
- 为textbox控件添加水印
- C# winform textbox 水印效果
- C#TextBox自动提示、自动补全、自动完成功能
- c#TextBox输入框自动提示、自动补全功能
- C语言版GDI+应用例子 -- 制作水印图片
- Android RectF类的构造函数参数说明
- 线性代数知识汇总
- 记android学习之路----android中对json数据的解析
- HTML标准中已经废弃的<marquee>标签
- Light OJ 1036A Refining Company
- 【C#】制作TextBox水印提示
- JAVA生成随机数(生成给定范围内N个不重复数)
- 记android学习之路----android中的网络请求
- Android 开发命令行完全攻略
- 简单AI算法
- 学习新知识的步骤
- bundle adjustment算法学习
- ctypes
- 四、Mybatis解决字段名与实体类属性名不相同的冲突