重写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/ ...
随机推荐
- POJ 3632 Optimal Parking(简单题)
[题意简述]:就是选择一个停车地点.然后走遍全部的store后,再回到停车地点.就是走一圈.问要走的距离是多少. [分析]:能够直接求出距离的最大值与最小值,求出差值.乘以2就是最后的输出结果. // ...
- Android 通过调用系统,如接口 谷歌语音、百度语音、科大讯飞语音等语音识别方法对话框
现在app在发展过程中会集成一些语音识别功能,不具有其自己的显影剂一般正在开发的语音识别引擎,所以在大多数情况下,它是选择一个成熟的语音识别引擎SDK集成到他们的app在. 平时,这种整合被分成两个, ...
- C++习题 虚函数-计算图形面积
C++习题 虚函数-计算图形面积 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 122 Solved: 86 [cid=1143&pid=6 ...
- iOS_16_开关控制器_modal_代码方法
最后效果图: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcHJlX2VtaW5lbnQ=/font/5a6L5L2T/fontsize/400/fill ...
- if/else 条件
if...else...和if语句是不同的运行方式: public class MyFirstApp{ public static void main(String[] args){ int x=3; ...
- Netbeans源代码编辑技巧——使用代码补全和代码生成
原文 Netbeans源代码编辑技巧——使用代码补全和代码生成 使用代码补全生成代码 一般来说,代码补全对于自动填充缺失的代码是有帮助的,例如标识符和关键字.截至 NetBeans IDE 6.0,您 ...
- 图画(txt等一下)实施开放的默认下载的默认浏览器,而不是(Java文本)
在网络上,假设我们超链接地址对应于jpg档,txt档,点击链接,默认浏览器打开这些文件,而不是下载,那么,你如何实现竞争力的默认下载. 1.可通过自己写一个download.jsp来实现 <%@ ...
- Cocos2d-x3.0下一个 Lua与C++打电话给对方
这里谈下Lua与C++如何实现相互通话 原来的连接:http://blog.csdn.net/qqmcy/article/details/26052771 DJLCData.h 实现类 // // D ...
- 使用psftp.exe
使用psftp.exe 点击打开psftp.exe,出现如下图的命令窗口.
- Red Gate系列之二 SQL Source Control 3.0.13.4214 Edition 数据库版本控制器 完全破解+使用教程
原文:Red Gate系列之二 SQL Source Control 3.0.13.4214 Edition 数据库版本控制器 完全破解+使用教程 Red Gate系列之二 SQL Source Co ...