重写TextBox实现显示提示信息
/// <summary>
/// TextBox提示信息
/// </summary>
/// <author>Tim_et</author>
/// <description>为TextBox提供提示信息,有ToolTip方式,边框提示方式,ErrorProvider方式</description>
[ToolboxItem(true)]
[ToolboxBitmap("information.bmp")]
public partial class TipTextBox : TextBox
{
/// <summary>
/// 窗体句柄绘制
/// </summary>
/// <param name="hWnd"></param>
/// <returns></returns>
[System.Runtime.InteropServices.DllImport("user32.dll")]
static extern IntPtr GetWindowDC(IntPtr hWnd);
[System.Runtime.InteropServices.DllImport("user32.dll")]
static extern int ReleaseDC(IntPtr hWnd, IntPtr hDC); //private string pattern = @"^[0-9]*$";
private int WM_PAINT = 0xF;
private string tipText;
private Color tipTextColor = Color.DarkGray;
private bool isShowTipText = false;
private Color tipBorderColor = Color.Red;
private Color normalBorderColor = Color.DimGray;
private bool isShowTipBorder = false;
#region errorProvider
private ErrorProvider errorProvider;
private string errorMsg = string.Empty;
/// <summary>
/// 错误信息
/// </summary>
public string ErrorMsg
{
get { return errorMsg; }
set { errorMsg = value; }
}
/// <summary>
/// 闪烁风格
/// </summary>
public ErrorBlinkStyle BlinkStyle
{
get { return errorProvider.BlinkStyle; }
set { errorProvider.BlinkStyle = value; }
}
/// <summary>
/// 闪烁间隔
/// </summary>
public int BlinkRate
{
get { return errorProvider.BlinkRate; }
set { errorProvider.BlinkRate = value; }
} #endregion /// <summary>
/// 提示信息内容
/// </summary>
[DefaultValue("")]
public string TipText
{
get { return tipText; }
set
{
tipText = value;
base.Invalidate();
}
}
/// <summary>
/// 提示信息的颜色
/// </summary>
[DefaultValue(typeof(Color), "DarkGray")]
public Color TipTextColor
{
get { return tipTextColor; }
set
{
tipTextColor = value;
base.Invalidate();
}
}
/// <summary>
/// 是否显示提示信息
/// </summary>
public bool IsShowTipText
{
get { return isShowTipText; }
set { isShowTipText = value; }
}
/// <summary>
/// 提示边框颜色
/// </summary>
public Color TipBorderColor
{
get { return tipBorderColor; }
set { tipBorderColor = value; }
}
/// <summary>
/// 正常时颜色(无需提示时)
/// </summary>
public Color NormalBorderColor
{
get { return normalBorderColor; }
set { normalBorderColor = value; }
}
/// <summary>
/// 是否显示提示边框
/// </summary>
public bool IsShowTipBorder
{
get { return isShowTipBorder; }
set { isShowTipBorder = value; }
} public TipTextBox()
: base()
{
errorProvider = new ErrorProvider();
} protected override void WndProc(ref Message m)
{ base.WndProc(ref m); if (m.Msg == WM_PAINT || m.Msg == 0x133)
{
if (isShowTipBorder)
{
IntPtr hDC = GetWindowDC(m.HWnd);
if (hDC.ToInt32() == )
{
return;
} System.Drawing.Pen pen = new Pen(this.tipBorderColor, );
if (this.Focused || this.Text.Length > )
{
pen.Color = normalBorderColor;
}
//绘制边框
System.Drawing.Graphics g = Graphics.FromHdc(hDC);
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
g.DrawRectangle(pen, , , this.Width - , this.Height - );
pen.Dispose();
m.Result = IntPtr.Zero;
//释放
ReleaseDC(m.HWnd, hDC);
} if (IsShowTipText)
{
///使用TextRenderer绘制底层的显示字样
using (Graphics graphics = Graphics.FromHwnd(this.Handle))
{
if (string.IsNullOrEmpty(this.Text) && !string.IsNullOrEmpty(TipText) && !Focused)
{
TextFormatFlags textFormatFlags = TextFormatFlags.EndEllipsis | TextFormatFlags.VerticalCenter;
if (this.RightToLeft == RightToLeft.Yes)
{
textFormatFlags |= TextFormatFlags.RightToLeft | TextFormatFlags.Right;
}
TextRenderer.DrawText(graphics, TipText, this.Font, base.ClientRectangle, TipTextColor, textFormatFlags);
}
}
} }
} /// <summary>
/// 显示errorProvider
/// </summary>
/// <param name="msg"></param>
public void ShowErrorProvider(string msg)
{
errorProvider.SetError(this, msg);
} private void InitializeComponent()
{
this.SuspendLayout();
this.ResumeLayout(false); }
}
重写TextBox实现显示提示信息的更多相关文章
- 基于JQuery的浮动DIV显示提示信息并自动隐藏
/** * 浮动DIV定时显示提示信息,如操作成功, 失败等 * @param string tips (提示的内容) * @param int height 显示的信息距离浏览器顶部的高度 * @p ...
- div显示提示信息
div显示提示信息 <body> <style type="text/css"> a.link{position:relative;} a.link div ...
- MFC 学习之 鼠标移动到Toolbar按钮上显示提示信息(tooltip),状态栏也随之改变
1.在ResourceView里加入Toolbar资源,命名IDR_TOOLBAR1 2.在主程序的.h文件中加入变量: CToolBar m_toolbar;CImageList ...
- VC/MFC 当鼠标移到控件上时显示提示信息
VC/MFC 当鼠标移到控件上时显示提示信息 ToolTip是Win32中一个通用控件,MFC中为其生成了一个类CToolTipCtrl,总的说来其使用方法是较简单的,下面讲一下它的一般用法和高级用法 ...
- div显示提示信息【转】
div显示提示信息 <body> <style type="text/css"> a.link{position:relative;} a.link div ...
- ArcGis For Silverlight API,地图显示Gis,绘制点,线,绘制图等--绘制点、线、圆,显示提示信息
ArcGis For Silverlight API,地图显示Gis,绘制点,线,绘制图等--绘制点.线.圆,显示提示信息 /// <summary> /// 绘制界面上的点和线 /// ...
- jQuery实现鼠标悬停显示提示信息窗口的方法
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- C#——DataGridView选中行,在TextBox中显示选中行的内容
C#--DataGridView选中行,在TextBox中显示选中行的内容,在DataGridView的SelectionChanged实践中设置如下代码 private void dataGridV ...
- jQuery鼠标悬停显示提示信息窗体
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
随机推荐
- 使用MSPT实现二层冗余
- Groovy常见语法汇总
一.groovy是什么 简单地说,Groovy 是下一代的java语言,跟java一样,它也运行在 JVM 中. 作为跑在JVM中的另一种语言,groovy语法与 Java 语言的语法很相似.同时,G ...
- eclipse3.1.1汉化版安装
确认安装好jdk以后,下载eclipse3.1.1及多语言包eclipse3.1.1 下载地址 http://eclipse.areum.biz/downloads/drops/R-3.1.1-2 ...
- Extjs4.10Model模型具体解释
一.创建Model模型 Extjs4.10提供了两种方法来创建Model模型,也就是创建类 方法一: Ext.define('person',{ extend:'Ext.da ...
- hunnu-11546--Sum of f(x)
Sum of f(x) Time Limit: 1000ms, Special Time Limit:2500ms, Memory Limit:32768KB Total submit users: ...
- 共同发展一个以上的开发者账户多台电脑 证书 p12 型材 进出口
1:导出相应的开发人员证书的配置文件. 2:依据相应的app id 创建配置文件. 3:打开钥匙串,把你的公布证书导出p12文件. 4:用开发人员账号导出developerprofile文件. 5:把 ...
- android平台TextView使用ImageSpan画廊GIF图像
android-gif-drawable(https://github.com/koral--/android-gif-drawable/releases)开源项目---是一个蛮不错的android ...
- Windows Phone开发(26):启动器与选择器之MediaPlayerLauncher和SearchTask
原文:Windows Phone开发(26):启动器与选择器之MediaPlayerLauncher和SearchTask 启动器与选择器简单的地方在于,它们的使用方法几乎一模一样,从前面几节中,我相 ...
- Windows7在自由的虚拟机(微软官方虚拟机)
Windows7在自由的虚拟机(微软官方虚拟机) 前言: 不是说windows7自带的虚拟机最好用,但他的正式版.免费.只是希望你能windows7用户.它将能够自由使用: 还是Vmware. 微软为 ...
- MySQL和Oracle开发差异
1) 数据类型差异 Oracle MySQL 注释 单独创建序列来实现 自动增长的数据类型 varchar2 varchar number tinyint,smallint,mediumint,in ...