標籤:
在一些軟體中,我們看到當一個輸入控制項(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); } }
C# WinForm控制項美化擴充系列之給TextBox加浮水印