C# Winform 窗体美化(十、自定义窗体)
生活随笔
收集整理的這篇文章主要介紹了
C# Winform 窗体美化(十、自定义窗体)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
十、自定義窗體
寫在前面
最近在做 winform 應(yīng)用程序,需要自定義一種窗口的樣式,所以就隨便搞了一個簡單的窗口。
效果圖
有兩種樣式,界面如下:
無標題:
有標題:
關(guān)鍵詞
1、黑色描邊邊框
對于窗口去掉原生的邊框這個操作很簡單【設(shè)置FormBorderStyle為None】,但是去掉邊框之后略顯生硬,所以就考慮如何做一個描邊。
方案a:用畫筆畫出來,但是畫出來的描邊會被控件擋住,所以作廢;
方案b:使用4個label,設(shè)置長寬和顏色,設(shè)置為最頂層,分別擺放在上下左右四個邊緣位置,現(xiàn)在來看效果還不錯,因為是控件是最頂層的原因,所以也不會被擋住,【如果你看到此處有什么好主意一定告知一下,先謝過了 ^_^ 】
2、拖動窗口移動
由于設(shè)置FormBorderStyle為None的原因,所以原來窗口標題的拖動功能也一并去除了,所以需要重新來手動實現(xiàn)原來標題的移動功能,重寫OnMouseMove方法即可,代碼如下:
protected override void OnMouseMove(MouseEventArgs e) {base.OnMouseMove(e);if (e.Button == MouseButtons.Left){//這里一定要判斷鼠標左鍵按下狀態(tài),否則會出現(xiàn)一個很奇葩的BUG,不信邪可以試一下~~ReleaseCapture();SendMessage(Handle, 0x00A1, 2, 0);} }[DllImport("user32.dll")] public static extern bool ReleaseCapture(); [DllImport("user32.dll")] public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);3、關(guān)于窗口屬性的添加
因為我做了描邊的功能,所以相對應(yīng)的,應(yīng)該會有一個描邊粗細的設(shè)置,當然放到屬性面板里最好,這里貼一下如何在屬性面板里添加新項目:
private int _Border = 1; [Category("Style")] [Description("窗體邊框粗細")] [DefaultValue(typeof(int), "1")] public int Border {get { return _Border; }set{if (_Border != value){_Border = value;SetBorder();}} }具體解釋可以再VS看到,都很詳細。
源碼
下載
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的C# Winform 窗体美化(十、自定义窗体)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vb.net 中最小化到托盘和锁定窗体大
- 下一篇: 清空session的方法