[C#] TextBox做浮水印提示

[C#] TextBox做浮水印提示

操作環境: ,

 

重新繼承TextBox
並增加三個屬性分別記錄提示訊息/訊息顏色/訊息字型

public partial class uTextBox : TextBox
{
    private string _tipText = string.Empty; //提示訊息
    public string TipText
    {
        get { return _tipText; }
        set { _tipText = value; Invalidate(); }
    }
 
    private Color _tipColor = SystemColors.Highlight; //訊息顏色
    public Color TipColor
    {
        get { return _tipColor; }
        set { _tipColor = value; Invalidate(); }
    }
 
    private Font _tipFont = DefaultFont; //訊息字型
    public Font TipFont
    {
        get { return _tipFont; }
        set { _tipFont = value; Invalidate(); }
    }
}

 

然後在重繪的事件中
判斷如果TextBox的狀態是啟用/可編輯/沒有取得焦點且沒有輸入文字時
那就把提示訊息"畫"到TextBox上

const int WM_PAINT = 0xF; //繪製的訊息
 
protected override void WndProc(ref Message m)
{
    base.WndProc(ref m);
 
    if (m.Msg == WM_PAINT && !string.IsNullOrEmpty(_tipText) && Text.Length == 0 && Enabled && !ReadOnly && !Focused) //判斷TextBox的狀態決定要不要顯示提示訊息
    {
        TextFormatFlags formatFlags = TextFormatFlags.Default; //使用原始設定的對齊方式來顯示提示訊息
        
        switch (TextAlign)
        {
            case HorizontalAlignment.Center:
                formatFlags = TextFormatFlags.HorizontalCenter;
                break;
            case HorizontalAlignment.Left:
                formatFlags = TextFormatFlags.Left;
                break;
            case HorizontalAlignment.Right:
                formatFlags = TextFormatFlags.Right;
                break;
        }
 
        TextRenderer.DrawText(Graphics.FromHwnd(Handle), _tipText, _tipFont, ClientRectangle, _tipColor, BackColor, formatFlags); //畫出提示訊息
    }
}

 

這是執行結果

image image

 

 

 

[範例Code下載]

 

 

 

by sam319