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]创建一个扩展文件-> ...
随机推荐
- 发现一个非常有趣好用的git博主,收录热门OC、swift项目三方架构
日常学习: https://github.com/iOShuyang/Book-Recommend-Github
- Go语言 并发编程
Go语言 并发编程 作者:Eric 微信:loveoracle11g 1.创建goroutine // 并行 是两个队列同时使用两台咖啡机 // 并发 是两个队列交替使用一台咖啡机 package m ...
- docker镜像的常用操作
获取镜像 比如说我们可以这样操作 当然把这个镜像拉过来时间非常长. 查看镜像列表 命令: docker images 说明: 使用docker images命令可以列出本地主机上已有的镜像. 信息 ...
- Linux中docker的使用(2)
容器下安装jdk和tomcat:通过挂载文件的方法,把宿主机上的文件挂载到容器中,然后解压到opt目录下:tar -zxvf 包名 -C /opt//opt目录下drwxr-xr-x 8 10 143 ...
- Centos7上安装java
1.默认情况下,系统安装的有jdk1.8,但是使用javac测试时会不识别这个命令, 意味着,java还是未安装好. 2.把java升级即可,此时java已经可用. yum -y install ...
- python3+2 不换行打印,多用于进度条 process bar
python3 不换行打印,多用于进度条 process bar process = 0 # process bar for i in user: process += 1 print("\ ...
- C++中#include<iostream>
#include 是个包含命令,就是把iostream.h这个文件里的内容复制到这个地方 iostream.h是input output stream的简写,意思为标准的输入输出流头文件.它包含: ( ...
- 深入理解Java虚拟机读书笔记1----Java内存区域与HotSpot虚拟机对象
一 Java内存区域与HotSpot虚拟机对象 1 Java技术体系.JDK.JRE? Java技术体系包括: · Java程序设计语言: · 各种硬件平台上的 ...
- FPGA——入手(零)
前几天正点原子团队退出了FPGA开发板,我就买了一套.我想的是,多学一点东西,即使到最后积累下的东西少,但是面是广的,以后可以更好的选择一种深入.就入手了新起点FPGA开发板,新起点算是开拓者的阉割版 ...
- Linux修改用户所在组方法
Linux修改用户所在组方法 usermod -g 用户组 用户名强行设置某个用户所在组usermod -G 用户组 用户名把某个用户改为 group(s) usermod -a -G 用户组 用户名 ...