[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); //畫出提示訊息
}
}
這是執行結果
[範例Code下載]
by sam319