c#: TextBox添加水印效果(PlaceHolderText)
基于他人代码修改,不闪,以做备忘。
与SendMessage EM_SETCUEBANNER消息相比,它能改变字体绘制颜色,EM_SETCUEBANNER只限定了DimGray颜色,太深
//与SendMessage EM_SETCUEBANNER消息相比,它能改变字体绘制颜色,EM_SETCUEBANNER只限定了DimGray颜色,太深
[ToolboxBitmap(typeof(TextBox))]
public class TextBoxEx : TextBox
{
private const int WM_PAINT = 0xF;
private Color placeHolderColor = Color.Gray;
private string placeHolderText; [DefaultValue("")]
[Localizable(true)]
[Editor("System.ComponentModel.Design.MultilineStringEditor, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", typeof(UITypeEditor))]
public string PlaceHolderText
{
get { return this.placeHolderText; }
set
{
this.placeHolderText = value;
Invalidate();
}
} protected override void WndProc(ref Message m)
{
base.WndProc(ref m);
if (m.Msg == WM_PAINT)
WmPaint(ref m);
} private void WmPaint(ref Message m)
{
if (!string.IsNullOrEmpty(this.Text) || string.IsNullOrEmpty(this.placeHolderText) || Focused)
return; using (var g = Graphics.FromHwnd(this.Handle))
{
var flag = TextFormatFlags.EndEllipsis;
//它反着来
if (RightToLeft == RightToLeft.Yes)
{
flag |= TextFormatFlags.RightToLeft;
if (TextAlign == HorizontalAlignment.Left)
flag |= TextFormatFlags.Right;
else if (TextAlign == HorizontalAlignment.Right)
flag |= TextFormatFlags.Left;
}
else
{
switch (TextAlign)
{
case HorizontalAlignment.Center:
flag |= TextFormatFlags.HorizontalCenter;
break;
case HorizontalAlignment.Right:
flag |= TextFormatFlags.Right;
break;
default:
break;
}
} var r = this.ClientRectangle;
r.Offset(-, );
TextRenderer.DrawText(
g,
this.placeHolderText,
Font,
r,
this.placeHolderColor,
flag
);
}
}
}
效果如图:

参考资料:
C# WinForm TextBox添加水印效果 - ZCoding - 博客园
c#: TextBox添加水印效果(PlaceHolderText)的更多相关文章
- C# WinForm TextBox添加水印效果
1.新建项目添加WatermarkTextBox类: using System; using System.Collections.Generic; using System.Text; using ...
- WPF文本框密码框添加水印效果
WPF文本框密码框添加水印效果 来源: 阅读:559 时间:2014-12-31 分享: 0 按照惯例,先看下效果 文本框水印 文本框水印相对简单,不需要重写模板,仅仅需要一个VisualBrush ...
- WPF 之 文本框及密码框添加水印效果
1.文本框添加水印效果 文本框水印相对简单,不需要重写模板,仅仅需要一个 VisualBrush 和触发器验证一下Text是否为空即可. <TextBox Name="txtSerac ...
- WPF的TextBox水印效果详解
一种自以为是的方式: 本来只是想简单的做个水印效果,在文本框内容为空的时候提示用户输入,这种需求挺常见.网上一搜 都是丢给你你一大段xaml代码.用c#代码实现我是不倾向了 既然用wpf就得Xaml啊 ...
- Java 图片添加水印效果
package com.xiaowu.drawwater.demo; import java.awt.AlphaComposite; import java.awt.Graphics2D; impor ...
- WPF实现TextBox水印效果
在日常项目中,一个TextBox需要输入用户名,我们通常的做法是先用一个TextBlock来说明,例如下面的截图: 今天将使用另外一种方式来展示,使用水印的方式.请参考下面的代码: <Windo ...
- WPF 文本框添加水印效果
有的时候我们需要为我们的WPF文本框TextBox控件添加一个显示水印的效果来增强用户体验,比如登陆的时候提示输入用户名,输入密码等情形.如下图所示: 这个时候我们除了可以修改TextBox控件的控件 ...
- C# 处理PPT水印(一)——添加水印效果(文字水印、图片水印)
对文档添加水印可以有效声明和保护文档,是保护重要文件的方式之一.在PPT文档中同样也可以设置水印,包括文本水印和图片水印,本文将讲述如何通过Spire.Presentation for .NET来对P ...
- [Xcode 实际操作]九、实用进阶-(16)给图片添加水印效果
目录:[Swift]Xcode实际操作 本文将演示如何截取屏幕画面,并将截取图片,存入系统相册. 在项目文件夹[DemoApp]上点击鼠标右键 ->[New File]创建一个扩展文件-> ...
随机推荐
- Zookeeper并不保证读取的是最新数据
Zookeeper并不保证读取的是最新数据 原文地址:http://www.crazyant.net/2120.html 如果是对zk进行读取操作,读取到的数据可能是过期的旧数据,不是最新的数据. 已 ...
- HTML+CSS 对于英文单词强制换行但不截断单词的解决办法
如何处理长的单词和链接(强制换行,连接符,省略号等) 我们在前端开发中经常会遇到一些很长的文本串从它的容器中溢出,例如: 通过这样一段css可以有效解决这种问题: .dont-break-out { ...
- Last Work-随机出题加法游戏
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- IntelliJ IDEA 关闭多余项目
在开发中 一个项目中可能会有多个子项目,切换起来比较麻烦,需要将用不到的项目关掉 1.就是关闭一个Project中多个module的一个 2.右击要关闭项目,选中弹出窗口中的 Load/Unload ...
- py库:os、shutil、pathlib
https://www.cnblogs.com/MnCu8261/p/5494807.html shutil模块 http://blog.csdn.net/rozol/article/details/ ...
- (5/24) 模块化:实现快速CSS文件打包
写在前面:为了兼容,此处的webpack版本为3.6.0.webpack-dev-server版本为2.9.7.css-loader版本为2.0.0.style-loader版本为0.23.1,若在下 ...
- html页面嵌套两个iframe页面导致第二个iframe页面高度失效的问题
1:这是因为最里面嵌套的iframe页面html和body高度无法设置问题,我的解决办法是js去控制iframe高度 2:js获取最子页面(content内容区域)的高度 var ifremHeigh ...
- jpa @RepositoryRestResource
依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spr ...
- HTML5 关于本地操作文件的方法
由于传统 b/s 开发出于安全性的考虑,浏览器对于本地文件的操作权限几乎没有,用户想要操作一个文件基本都是采用先上传到服务器, 再回显给浏览器供用户编辑,裁剪等的方法,这种方式虽然可行,但其对于服务器 ...
- 2018-2019-2 网络对抗技术 20165304 Exp5 MSF基础应用
2018-2019-2 网络对抗技术 20165304Exp5 MSF基础应用 原理与实践说明 1.实践原理 1).MSF攻击方法 主动攻击:扫描主机漏洞,进行攻击 攻击浏览器 攻击其他客户端 2). ...