/// <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实现显示提示信息的更多相关文章

  1. 基于JQuery的浮动DIV显示提示信息并自动隐藏

    /** * 浮动DIV定时显示提示信息,如操作成功, 失败等 * @param string tips (提示的内容) * @param int height 显示的信息距离浏览器顶部的高度 * @p ...

  2. div显示提示信息

    div显示提示信息 <body> <style type="text/css"> a.link{position:relative;} a.link div ...

  3. MFC 学习之 鼠标移动到Toolbar按钮上显示提示信息(tooltip),状态栏也随之改变

    1.在ResourceView里加入Toolbar资源,命名IDR_TOOLBAR1 2.在主程序的.h文件中加入变量:           CToolBar m_toolbar;CImageList ...

  4. VC/MFC 当鼠标移到控件上时显示提示信息

    VC/MFC 当鼠标移到控件上时显示提示信息 ToolTip是Win32中一个通用控件,MFC中为其生成了一个类CToolTipCtrl,总的说来其使用方法是较简单的,下面讲一下它的一般用法和高级用法 ...

  5. div显示提示信息【转】

    div显示提示信息 <body> <style type="text/css"> a.link{position:relative;} a.link div ...

  6. ArcGis For Silverlight API,地图显示Gis,绘制点,线,绘制图等--绘制点、线、圆,显示提示信息

    ArcGis For Silverlight API,地图显示Gis,绘制点,线,绘制图等--绘制点.线.圆,显示提示信息 /// <summary> /// 绘制界面上的点和线 ///  ...

  7. jQuery实现鼠标悬停显示提示信息窗口的方法

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  8. C#——DataGridView选中行,在TextBox中显示选中行的内容

    C#--DataGridView选中行,在TextBox中显示选中行的内容,在DataGridView的SelectionChanged实践中设置如下代码 private void dataGridV ...

  9. jQuery鼠标悬停显示提示信息窗体

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

随机推荐

  1. SE 2014年4月2日

    一 描述OSPF协议 LSA(Type 1~5)的名称,始发者以及特点 第一类LSA (router lsa)该类lSA为启动了ospf进程的所有路由器都可以产生,该类LSA主要含有本地路由器的接口状 ...

  2. hdu3899(树形dp)

    题意:给一树,每个结点有人数,边有权值,表示经过这条边所需时间, 问取某个结点作为开会地点,所有人全部到达此结点最少所需总时间? 分析:val[u]表示以u为根节点的总人数,num[u]表示以u为根节 ...

  3. A Game of Thrones(2) - Catelyn

    Catelyn had never liked this godswood(神木林). She had been born a Tully, at Riverrun far to the south, ...

  4. linux 除了某个文件或某个目录以外所有删除

    rm `ls | grep -v "aa"`    //删除除带aa字符串的全部文件 ls | grep -v keep | xargs rm //除keep字符串的以外全删除 r ...

  5. 整理QTP知识之1

    以下说明由网络其他文章整合而成. 一.关于QTP的说明 QTP是目前市场上占有率最高的一款自动化测试工具,也是每一位测试工作者最想掌握的工具之一,也是目前流行的基于GUI的功能自动化测试工具之一. Q ...

  6. POJ 1276  Cash Machine(多重背包)

    Cash Machine Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 24132 Accepted: 8446 Descrip ...

  7. Centos 6.4 Linux 相关问题总结

    1.中文输入法安装 su root yum install "@Chinese Support" exit 然后设置Input Methord即可. 最后一步:logout,注意是 ...

  8. 【译】使用微软企业库5.0进行WCF服务边界上的异常保护

    在Windows Communication Foundation (WCF)中,为了阻止服务的实现细节从服务的安全边界泄露,未知的异常不应该被发送至客服端.在WCF配置中将<serviceDe ...

  9. shell程序之逐行读取一文件里的參数且使用此參数每次运行5分钟

    /*********************************************************************  * Author  : Samson  * Date   ...

  10. 玩转Web值jquery(一)---对表单中的某一标签批量处理(以input为例)

    jquery可以对form进行操作,以批量操作某一标签,这里以input标签为例总结. 示例一:对删除infoForm表单的input的所有readonly属性 $("#infoForm i ...