方法一:

  1. public partial class WaterTextBox : TextBox
  2. {
  3. private readonly Label lblwaterText = new Label();
  4.  
  5. public WaterTextBox()
  6. {
  7. InitializeComponent();
  8. lblwaterText.BorderStyle = BorderStyle.None;
  9. lblwaterText.Enabled = false;
  10. lblwaterText.BackColor = Color.White;
  11. lblwaterText.AutoSize = false;
  12. lblwaterText.Top = 1;
  13. lblwaterText.Left = 0;
  14. Controls.Add(lblwaterText);
  15. }
  16.  
  17. [Category("扩展属性"), Description("显示的提示信息")]
  18. public string WaterText
  19. {
  20. get { return lblwaterText.Text; }
  21. set { lblwaterText.Text = value; }
  22. }
  23.  
  24. public override string Text
  25. {
  26. set
  27. {
  28. if (value != string.Empty)
  29. lblwaterText.Visible = false;
  30. else
  31. lblwaterText.Visible = true;
  32. base.Text = value;
  33. }
  34. get { return base.Text; }
  35. }
  36.  
  37. protected override void OnSizeChanged(EventArgs e)
  38. {
  39. if (Multiline && (ScrollBars == ScrollBars.Vertical || ScrollBars == ScrollBars.Both))
  40. lblwaterText.Width = Width - 20;
  41. else
  42. lblwaterText.Width = Width;
  43. lblwaterText.Height = Height - 2;
  44. base.OnSizeChanged(e);
  45. }
  46.  
  47. protected override void OnEnter(EventArgs e)
  48. {
  49. lblwaterText.Visible = false;
  50. base.OnEnter(e);
  51. }
  52.  
  53. protected override void OnLeave(EventArgs e)
  54. {
  55. if (base.Text == string.Empty)
  56. lblwaterText.Visible = true;
  57. base.OnLeave(e);
  58. }
  59. }

方法二:(待改进)改进点:提示文本是颜色,进入时自动消失,失去焦点后如果没有值又显示提示文本。如果哪位改进好了,可以回给我看看吗?

  1. public partial class WaterTextBox1 : TextBox
  2. {
  3. private String strEmptyValue = String.Empty;
  4.  
  5. public WaterTextBox1()
  6. {
  7. InitializeComponent();
  8. processDefaultValue();
  9. }
  10.  
  11. public String EmptyValue //记录空值的表现
  12. {
  13. get { return strEmptyValue; }
  14. set
  15. {
  16. if (base.Text == strEmptyValue)
  17. base.Text = value.Trim();
  18. strEmptyValue = value.Trim();
  19. processDefaultValue();
  20. }
  21. }
  22.  
  23. public override string Text //覆盖Text属性
  24. {
  25. get { return base.Text.Trim() == strEmptyValue.Trim() ? String.Empty : base.Text.Trim(); }
  26. set
  27. {
  28. base.Text = value;
  29. processDefaultValue();
  30. }
  31. }
  32.  
  33. protected override void OnVisibleChanged(EventArgs e)
  34. {
  35. base.OnVisibleChanged(e);
  36. processDefaultValue();
  37. }
  38.  
  39. protected override void OnMouseClick(MouseEventArgs e)
  40. {
  41. base.OnMouseClick(e);
  42. if (base.Text == strEmptyValue)
  43. {
  44. SelectAll();
  45. }
  46.  
  47. }
  48.  
  49. protected override void OnValidating(CancelEventArgs e) //覆盖TextBox验证处理
  50. {
  51. processDefaultValue();
  52. base.OnValidating(e);
  53. }
  54.  
  55. private void processDefaultValue() //处理表现空值的方法
  56. {
  57. base.Text = base.Text.Trim().Length <= 0 ? strEmptyValue : base.Text.Trim();
  58. }
  59. }

Winform 水印TextBox的更多相关文章

  1. winform的Textbox设置只读之后ForeColor无效的解决方法

    winform的Textbox设置只读之后ForeColor无效. 通过以下方法就可以解决: 设置为只读之后,把BackColor改一下,然后运行一下窗口,再设置ForeColor就没问题了. tbT ...

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

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

  3. Winform给TextBox设置默认值

    Winform给TextBox设置默认值(获取焦点后默认值消失) 主要是通过TextBox的获取焦点Enter和失去焦点Leave两个事件来实现的, 思路如下: 1.设置一个字符串常量,作为TextB ...

  4. winform的Textbox设置只读之后使用ForeColor更改颜色

    winform的Textbox设置只读之后设置ForeColor更改颜色无效.这是 TextBox 默认的行为. 解决方法:设置为只读之后,修改控件的BackColor,再设置ForeColor就可以 ...

  5. [WinForm]为TextBox设置水印文字

    关键代码: using System; using System.Runtime.InteropServices; using System.Windows.Forms; namespace WinF ...

  6. winform的水印TextBox

    public partial class WaterTextBox : TextBox { private readonly Label lblwaterText = new Label(); pub ...

  7. Winform水印

    本文实例展示了WinForm实现为TextBox设置水印文字功能,非常实用的技巧,分享给大家供大家参考. 关键代码如下 using System; using System.Runtime.Inter ...

  8. WinForm自定义控件–TextBox扩展

      一.简单回顾 在前两节中,对Panel和GroupBox控件进行了相关的扩展应用,主要都是设置控件的边框以及边框颜色等.本节,继续对WinForm现有的控件TextBox进行扩展,来满足实际开发中 ...

  9. windows phone 水印TextBox

    原文来自:wp教程网 原理:在失去焦点和获取焦点的时候,判断Text值是否为空或者是否与水印值相同,然后修改TextBox中的Text和Foreground. 代码如下: /* =========== ...

随机推荐

  1. linux命令——磁盘管理pwd

    Linux中用 pwd 命令来查看”当前工作目录“的完整路径(绝对路径). 简单得说,每当你在终端进行操作时,你都会有一个当前工作目录.在不太确定当前位置时,就会使用pwd来判定当前目录在文件系统内的 ...

  2. AtCoder Grand Contest 001 C Shorten Diameter 树的直径知识

    链接:http://agc001.contest.atcoder.jp/tasks/agc001_c 题解(官方): We use the following well-known fact abou ...

  3. codedorces 260 div2 A题

    水题,扫描一遍看是否出现价格低质量高的情况. #include<cstdio> #include<string> #include<vector> #include ...

  4. Webdriver API (三)- actions

    Actions类主要定义了一些模拟用户的鼠标mouse,键盘keyboard操作.对于这些操作,使用perform()方法进行执行. actions类可以完成单一的操作,也可以完成几个操作的组合. 有 ...

  5. 《Python 学习手册4th》 第六章 动态类型简介

    ''' 时间: 9月5日 - 9月30日 要求: 1. 书本内容总结归纳,整理在博客园笔记上传 2. 完成所有课后习题 注:“#” 后加的是备注内容 (每天看42页内容,可以保证月底看完此书)“重点笔 ...

  6. C++实现网格水印之调试笔记(二)

    整理了一下要实现的论文Watermarking 3D Polygonal Meshes in the Mesh Spectral Domain,步骤如下: 嵌入水印 à 提取水印 à 优化(网格细分) ...

  7. 自学hadoop(三)

    1) 关于hadoop在eclipse插件.经过自己的摸爬滚打.总结一下三条.     a) 2.0或者0.23.0吧 google比较方便.其他的可以自己编译.(这个我不敢保证.我本地环境事2.1. ...

  8. File-nodejs

    文件系统模块是一个简单包装的标准 POSIX 文件 I/O 操作方法集.您可以通过调用require('fs')来获取该模块.文件系统模块中的所有方法均有异步和同步版本. 文件系统模块中的异步方法需要 ...

  9. wireshark筛选器汇总

    抓取指定IP地址的数据流: 如果你的抓包环境下有很多主机正在通讯,可以考虑使用所观察主机的IP地址来进行过滤.以下为IP地址抓包过滤示例: host 10.3.1.1:抓取发到/来自10.3.1.1的 ...

  10. [Hive优化] 之 MapJoin

    根据mapjoin的计算原理,MAPJION会把小表全部读入内存中,在map阶段直接拿另外一个表的数据和内存中表数据做匹配.这种情况下即使笛卡尔积也不会对任务运行速度造成太大的效率影响. mapjoi ...