首頁  >  文章  >  後端開發  >  從0自學C#01–自繪窗體邊框

從0自學C#01–自繪窗體邊框

黄舟
黄舟原創
2017-02-04 10:29:052495瀏覽

主要介紹自繪窗體邊框和背景顏色逐級變淺(深)。

1.先設定窗體為無邊框模式

this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;

也可以右鍵點選窗體,選擇屬性,找到FormBorderStyler設定為None。此時窗體右上角的最小化、最大化和關閉按鈕會消失,滑鼠拖曳窗體的功能也會消失,這些會在第4步添加。

2.繪製邊框

選擇目前項目右鍵,新增組件,讓組件類Component1繼承Panel類,然後重寫OnPaint(PaintEventArgs e),繪製邊框顏色。產生解決方案,該元件會自動加入工具箱裡,元件列下。類別代碼如下:

public partial class Component1 : Panel
    {        public Component1()
        {
            InitializeComponent();
        }        public Component1(IContainer container)
        {
            container.Add(this);

            InitializeComponent();
        }        protected override void OnPaint(PaintEventArgs e)
        {
            ControlPaint.DrawBorder(e.Graphics,                          this.ClientRectangle,
                          Color.FromArgb(00,59,96),                          2,
                          ButtonBorderStyle.Solid,
                          Color.FromArgb(00,59,96),                          2,
                          ButtonBorderStyle.Solid,
                          Color.FromArgb(00,59,96),                          2,
                          ButtonBorderStyle.Solid,
                          Color.FromArgb(00,59,96),                          2,
                          ButtonBorderStyle.Solid);            base.OnPaint(e);
        }
    }

Color.FromArgb(00,59,96)設定邊框顏色,2設定邊框尺寸。 
註:如果不知道設定什麼rgb值,使得顏色好看。可以上網下載一個螢幕取色器,讀出你認為好看顏色的rbg值。

3.新增邊框

將元件Component1加入窗體,設定其Dock屬性為Fill。然後設定Padding屬性為2,2,2,2(與邊框尺寸對應)。也可以動態實現,程式碼如下:

this.component11.Dock = System.Windows.Forms.DockStyle.Fill;
this.component11.Padding = new System.Windows.Forms.Padding(2);

4.新增窗體關閉、最小化,滑鼠拖曳功能

在窗體組件this.Component11上,新增Panel,設定其Dock屬性為Top,自訂背景顏色為0,102,171,前景色為Transparent。

this.panel1.Dock = System.Windows.Forms.DockStyle.Top;
this.panel1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(102)))), ((int)(((byte)(171)))));
this.panel1.ForeColor = System.Drawing.Color.Transparent;


然後在Pannel上添加兩個label,設定其Text分別為__和X,為最小化和最大化圖示。字體設定為微軟雅黑、粗體、小五號。最後為Pannel添加MouseDown和MouseMove事件。為label新增Click事件,新增MouseEnter和MouseLeave事件,使得滑鼠移到圖示上時,滑鼠變成手型。

Point mouseOffSet;private void panel1_MouseDown(object sender, MouseEventArgs e)
        {
            mouseOffSet = new Point(-e.X, -e.Y);
        }private void panel1_MouseMove(object sender, MouseEventArgs e)
        {            if (e.Button == MouseButtons.Left)
            {
                Point mousePosition = Control.MousePosition;
                mousePosition.Offset(mouseOffSet.X, mouseOffSet.Y);
                Location = mousePosition;
            }
        }private void labelMinimize_Click(object sender, EventArgs e)
        {            this.WindowState = FormWindowState.Minimized;
        }private void labelClose_Click(object sender, EventArgs e)
        {            this.Close();            this.Dispose();
            Application.Exit();
        }private void labelMinimize_MouseEnter(object sender, EventArgs e)
        {            this.Cursor = Cursors.Hand;
        }private void labelMinimize_MouseLeave(object sender, EventArgs e)
        {            this.Cursor = Cursors.Default;
        }private void labelClose_MouseEnter(object sender, EventArgs e)
        {            this.Cursor = Cursors.Hand;
        }private void labelClose_MouseLeave(object sender, EventArgs e)
        {            this.Cursor = Cursors.Default;
        }

5.Panel背景色設定為逐級變淡

為Pannel添加Paint事件。

private void panel1_Paint(object sender, PaintEventArgs e)
        {            int y, dy;
            y = this.panel1.ClientRectangle.Location.Y;
            dy = this.panel1.ClientRectangle.Height / 90;            for (int i = 0; i <= 89;i++ )
            {
                Color c = new Color();                //调用Color对象的FromArgb方法
                c = Color.FromArgb(50, i + 50, i + 120);//0,102,171
                SolidBrush sb = new SolidBrush(c);
                Pen p = new Pen(sb, 1);                //绘制矩形
                e.Graphics.DrawRectangle(p, this.panel1.ClientRectangle.X, y, this.Width, y + dy);
                y = y + dy;                //i++;
            }        
        }

以上就是從0自學C#01–自繪窗體邊框的內容,更多相關內容請關注PHP中文網(www.php.cn)!


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn