WinForm控件美化扩展系列之给TextBox加水印

WinForm控件美化扩展系列之给TextBox加水印


来自:http://www.csharpwin.com/csharpresource/503.shtml

在一些软件中,我们看到当一个输入控件(TextBox)没有输入而且没有焦点的时候,会显示一些提示信息,网上有一些介绍用复合控件来实现,其实我们直接继承TextBox控件也很容易实现。

下面就介绍怎样来实现这个控件。

第一步:我们建一个继承 TextBox 的类,命名为WatermakTextBox

第二步:给这个类添加两个属性,一个是EmptyTextTip,就是当控件没有输入内容和没有焦点的时候显示的提示文本,也就是水印了;另一个是EmptyTextTipColor,就是提示文本的颜色。

第三步:也就是最重要的一步,就是重写WndProc 函数,截取WM_PAINT消息,当没有输入内容和输入焦点时,重绘TextBox,看下面的代码:



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)
{
    Rectangle rectangle = new Rectangle(0, 0, Width, Height);
    using (Graphics graphics = Graphics.FromHwnd(base.Handle))
    {
        if (Text.Length == 0
           && !string.IsNullOrEmpty(_emptyTextTip)
           && !Focused)
        {
           TextFormatFlags format =
                TextFormatFlags.EndEllipsis |
                TextFormatFlags.VerticalCenter;
 
            if (RightToLeft == RightToLeft.Yes)
            {
                format |= TextFormatFlags.RightToLeft | TextFormatFlags.Right;
            }
 
            TextRenderer.DrawText(
                graphics,
                _emptyTextTip,
                Font,
                base.ClientRectangle,
                _emptyTextTipColor,
                  format);
          }
       }
}

现在我们就实现了给 TextBox 加水印了,来看看效果吧


你可能感兴趣的:(WinForm控件美化扩展系列之给TextBox加水印)