• <label id="pxtpz"><meter id="pxtpz"></meter></label>
      1. <span id="pxtpz"><optgroup id="pxtpz"></optgroup></span>

        當前位置:雨林木風下載站 > 技術開發教程 > 詳細頁面

        FlatStyle按鈕自己做

        FlatStyle按鈕自己做

        更新時間:2022-05-09 文章作者:未知 信息來源:網絡 閱讀次數:

        FlatStyle按鈕自己做



        和C或VB比起來,使用C#寫自定義控件,特別是從零開始寫自定義控件,不知簡化了多少倍,沒有復雜而晦澀的消息映射,思路就像寫應用程序一樣如行云流水,一路暢通。學過delphi的人都知道有一套FlatStyle控件,平面式的簡約風格給用戶帶來了良好的視覺效果。但是看看他的源碼,如果沒有一定的Windows底層功底,看起來可不是件容易的事。現在好了,有了C#這個異常強大的工具,我們就可以輕輕松松的寫一個自己的FlatStyle控件了。



        本文以平面按鈕為例,寫一個按鈕顏色和邊框顏色能任意更改的自定義按鈕控件,希望能起到拋磚引玉的作用。



        如果我們只是改變已有的控件的外觀(如本例),那么最好繼承原有的控件。如:

        public class ButtonLzh : System.Windows.Forms.Button



        定義一個枚舉類型,用來描述鼠標的狀態:

        protected enum Status

        {

        MouseEnter,

        MouseLeave,

        MouseDown,

        MouseUp

        }



        寫一個畫文字的函數:

        protected void DrawString(string strText,Graphics g)

        {

        StringFormat sf=new StringFormat();

        sf.LineAlignment=StringAlignment.Center;

        sf.Alignment=StringAlignment.Center;

        g.DrawString(strText,this.Font,new SolidBrush(Color.Blue),this.ClientRectangle,sf);

        }



        填充按鈕顏色及畫邊框顏色:

        protected void DrawBorder(Status status,Graphics g)

        {

        Pen[] MousePen=new Pen[4];//定義四支筆

        MousePen[(int)Status.MouseDown]=new Pen(_MouseDownBorderColor,2);

        MousePen[(int)Status.MouseEnter]=new Pen(_MouseEnterBorderColor,2);

        MousePen[(int)Status.MouseLeave]=new Pen(_MouseLeaveBorderColor,2);

        MousePen[(int)Status.MouseUp]=new Pen(_MouseUpBorderColor,2);



        SolidBrush[] MouseBrush=new SolidBrush[4];//定義四個筆刷

        MouseBrush[(int)Status.MouseDown]=new SolidBrush(_MouseDownColor);

        MouseBrush[(int)Status.MouseEnter]=new SolidBrush(_MouseEnterColor);

        MouseBrush[(int)Status.MouseLeave]=new SolidBrush(_MouseLeaveColor);

        MouseBrush[(int)Status.MouseUp]=new SolidBrush(_MouseUpColor);



        switch(status)

        {

        case Status.MouseDown:

        g.FillRectangle(MouseBrush[(int)Status.MouseDown],this.ClientRectangle);

        g.DrawRectangle(MousePen[(int)Status.MouseDown],this.ClientRectangle);

        break;



        case Status.MouseEnter:

        g.FillRectangle(MouseBrush[(int)Status.MouseEnter],this.ClientRectangle);

        g.DrawRectangle(MousePen[(int)Status.MouseEnter],this.ClientRectangle);

        break;



        case Status.MouseLeave:

        g.FillRectangle(MouseBrush[(int)Status.MouseLeave],this.ClientRectangle);

        g.DrawRectangle(MousePen[(int)Status.MouseLeave],this.ClientRectangle);

        break;



        case Status.MouseUp:

        g.FillRectangle(MouseBrush[(int)Status.MouseUp],this.ClientRectangle);

        g.DrawRectangle(MousePen[(int)Status.MouseUp],this.ClientRectangle);

        break;

        }



        for(int i=0;i<4;i++)

        {

        MousePen[i].Dispose();

        MouseBrush[i].Dispose();

        }

        }

        重載OnPaint()事件:

        protected override void OnPaint(PaintEventArgs e)

        {

        base.OnPaint (e);

        Graphics g=e.Graphics;



        switch(MouseStatus)

        {

        case Status.MouseDown:

        this.DrawBorder(Status.MouseDown,g);

        this.DrawString(this.Text,g);

        break;

        case Status.MouseEnter:

        this.DrawBorder(Status.MouseEnter,g);

        this.DrawString(this.Text,g);

        break;

        case Status.MouseLeave:

        this.DrawBorder(Status.MouseLeave,g);

        this.DrawString(this.Text,g);

        break;

        case Status.MouseUp:

        this.DrawBorder(Status.MouseUp,g);

        this.DrawString(this.Text,g);

        break;

        }



        }



        基本的函數就是這樣了,無外乎就是畫邊框,然后填充顏色。當我們重載了OnPaint()事件后,也就等于把按鈕的外觀繪制權交到了自己的手里,你想怎么畫就怎么畫啦。



        以下是程序的所有源碼,新建一個Windows控件庫,把代碼復制過去就OK!

        using System;

        using System.Collections;

        using System.ComponentModel;

        using System.Drawing;

        using System.Data;

        using System.Windows.Forms;



        namespace LzhButton

        {

        /// <summary>

        /// UserControl1 的摘要說明。

        /// </summary>

        public class ButtonLzh : System.Windows.Forms.Button

        {

        private Color _MouseEnterColor;

        private Color _MouseLeaveColor;

        private Color _MouseDownColor;

        private Color _MouseUpColor;



        private Color _MouseEnterBorderColor;

        private Color _MouseLeaveBorderColor;

        private Color _MouseDownBorderColor;

        private Color _MouseUpBorderColor;



        private Status MouseStatus;



        [Description("鼠標進入控件內的顏色"),Category("Appearance")]

        public Color MouseEnterColor

        {

        get

        {

        return _MouseEnterColor;

        }

        set

        {

        _MouseEnterColor=value;

        }

        }



        [Description("鼠標移出控件外的顏色"),Category("Appearance")]

        public Color MouseLeaveColor

        {

        get

        {

        return _MouseLeaveColor;

        }

        set

        {

        _MouseLeaveColor=value;

        }

        }



        [Description("鼠標按下時按鈕的顏色"),Category("Appearance")]

        public Color MouseDownColor

        {

        get

        {

        return _MouseDownColor;

        }

        set

        {

        _MouseDownColor=value;

        }

        }



        [Description("鼠標彈起時按鈕的顏色"),Category("Appearance")]

        public Color MouseUpColor

        {

        get

        {

        return _MouseUpColor;

        }

        set

        {

        _MouseUpColor=value;

        }

        }





        /////////////////////////////////////////////

        [Description("鼠標進入按鈕時的邊框顏色"),Category("Appearance")]

        public Color MouseEnterBorderColor

        {

        get

        {

        return _MouseEnterBorderColor;

        }

        set

        {

        _MouseEnterBorderColor=value;

        }

        }

        [Description("鼠標移出按鈕的邊框顏色"),Category("Appearance")]

        public Color MouseLeaveBorderColor

        {

        get

        {

        return _MouseLeaveBorderColor;

        }

        set

        {

        _MouseLeaveBorderColor=value;

        }

        }



        [Description("鼠標按下按鈕的邊框顏色"),Category("Appearance")]

        public Color MouseDownBorderColor

        {

        get

        {

        return _MouseDownBorderColor;

        }

        set

        {

        _MouseDownBorderColor=value;

        }

        }



        [Description("鼠標彈起時按鈕的邊框顏色"),Category("Appearance")]

        public Color MouseUpBorderColor

        {

        get

        {

        return _MouseUpBorderColor;

        }

        set

        {

        _MouseUpBorderColor=value;

        }

        }





        /// <summary>

        /// 必需的設計器變量。

        /// </summary>

        private System.ComponentModel.Container components = null;



        public ButtonLzh()

        {

        // 該調用是 Windows.Forms 窗體設計器所必需的。

        InitializeComponent();



        // TODO: 在 InitComponent 調用后添加任何初始化



        }



        /// <summary>

        /// 清理所有正在使用的資源。

        /// </summary>

        protected override void Dispose( bool disposing )

        {

        if( disposing )

        {

        if( components != null )

        components.Dispose();

        }

        base.Dispose( disposing );

        }



        #region 組件設計器生成的代碼

        /// <summary>

        /// 設計器支持所需的方法 - 不要使用代碼編輯器

        /// 修改此方法的內容。

        /// </summary>

        private void InitializeComponent()

        {

        //

        // ButtonLzh

        //

        this.MouseUp += new System.Windows.Forms.MouseEventHandler(this.ButtonLzh_MouseUp);

        this.MouseEnter += new System.EventHandler(this.ButtonLzh_MouseEnter);

        this.MouseLeave += new System.EventHandler(this.ButtonLzh_MouseLeave);

        this.MouseDown += new System.Windows.Forms.MouseEventHandler(this.ButtonLzh_MouseDown);





        //初始化

        _MouseEnterColor=Color.Yellow;

        _MouseLeaveColor=Color.Pink;

        _MouseDownColor=Color.Red;

        _MouseUpColor=Color.Blue;



        _MouseEnterBorderColor=Color.GreenYellow;

        _MouseLeaveBorderColor=Color.DeepPink;

        _MouseDownBorderColor=Color.PaleVioletRed;

        _MouseUpBorderColor=Color.CadetBlue;



        }

        #endregion



        protected enum Status

        {

        MouseEnter,

        MouseLeave,

        MouseDown,

        MouseUp

        }



        /// <summary>

        /// 畫文字

        /// </summary>

        /// <param name="strText">要畫的文字</param>

        /// <param name="g">畫布</param>

        protected void DrawString(string strText,Graphics g)

        {

        StringFormat sf=new StringFormat();

        sf.LineAlignment=StringAlignment.Center;

        sf.Alignment=StringAlignment.Center;

        g.DrawString(strText,this.Font,new SolidBrush(Color.Blue),this.ClientRectangle,sf);

        }



        /// <summary>

        /// 畫邊框

        /// </summary>

        /// <param name="status">鼠標狀態</param>

        /// <param name="g">畫布</param>

        protected void DrawBorder(Status status,Graphics g)

        {

        Pen[] MousePen=new Pen[4];//定義四支筆

        MousePen[(int)Status.MouseDown]=new Pen(_MouseDownBorderColor,2);

        MousePen[(int)Status.MouseEnter]=new Pen(_MouseEnterBorderColor,2);

        MousePen[(int)Status.MouseLeave]=new Pen(_MouseLeaveBorderColor,2);

        MousePen[(int)Status.MouseUp]=new Pen(_MouseUpBorderColor,2);



        SolidBrush[] MouseBrush=new SolidBrush[4];//定義四個筆刷

        MouseBrush[(int)Status.MouseDown]=new SolidBrush(_MouseDownColor);

        MouseBrush[(int)Status.MouseEnter]=new SolidBrush(_MouseEnterColor);

        MouseBrush[(int)Status.MouseLeave]=new SolidBrush(_MouseLeaveColor);

        MouseBrush[(int)Status.MouseUp]=new SolidBrush(_MouseUpColor);



        switch(status)

        {

        case Status.MouseDown:

        g.FillRectangle(MouseBrush[(int)Status.MouseDown],this.ClientRectangle);

        g.DrawRectangle(MousePen[(int)Status.MouseDown],this.ClientRectangle);

        break;



        case Status.MouseEnter:

        g.FillRectangle(MouseBrush[(int)Status.MouseEnter],this.ClientRectangle);

        g.DrawRectangle(MousePen[(int)Status.MouseEnter],this.ClientRectangle);

        break;



        case Status.MouseLeave:

        g.FillRectangle(MouseBrush[(int)Status.MouseLeave],this.ClientRectangle);

        g.DrawRectangle(MousePen[(int)Status.MouseLeave],this.ClientRectangle);

        break;



        case Status.MouseUp:

        g.FillRectangle(MouseBrush[(int)Status.MouseUp],this.ClientRectangle);

        g.DrawRectangle(MousePen[(int)Status.MouseUp],this.ClientRectangle);

        break;

        }



        for(int i=0;i<4;i++)

        {

        MousePen[i].Dispose();

        MouseBrush[i].Dispose();

        }

        }



        /// <summary>

        /// 重載OnPaint事件

        /// </summary>

        /// <param name="e"></param>

        protected override void OnPaint(PaintEventArgs e)

        {

        base.OnPaint (e);

        Graphics g=e.Graphics;



        switch(MouseStatus)

        {

        case Status.MouseDown:

        this.DrawBorder(Status.MouseDown,g);

        this.DrawString(this.Text,g);

        break;

        case Status.MouseEnter:

        this.DrawBorder(Status.MouseEnter,g);

        this.DrawString(this.Text,g);

        break;

        case Status.MouseLeave:

        this.DrawBorder(Status.MouseLeave,g);

        this.DrawString(this.Text,g);

        break;

        case Status.MouseUp:

        this.DrawBorder(Status.MouseUp,g);

        this.DrawString(this.Text,g);

        break;

        }



        }



        private void ButtonLzh_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)

        {

        MouseStatus=Status.MouseDown;

        this.Invalidate();

        }



        private void ButtonLzh_MouseEnter(object sender, System.EventArgs e)

        {

        MouseStatus=Status.MouseEnter ;

        this.Invalidate();

        }



        private void ButtonLzh_MouseLeave(object sender, System.EventArgs e)

        {

        MouseStatus=Status.MouseLeave;

        this.Invalidate();

        }



        private void ButtonLzh_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)

        {

        MouseStatus=Status.MouseUp;

        this.Invalidate();

        }



        }

        }

        溫馨提示:喜歡本站的話,請收藏一下本站!

        本類教程下載

        系統下載排行

        主站蜘蛛池模板: 国产91免费在线观看| 在线精品一卡乱码免费| 国产精品无码一区二区三区免费| 男人的天堂av亚洲一区2区| 国产在线观看麻豆91精品免费| 亚洲精品人成在线观看| 18禁无遮挡无码国产免费网站| 亚洲福利在线视频| 苍井空亚洲精品AA片在线播放| 野花高清在线观看免费3中文| 亚洲一欧洲中文字幕在线| 免费电视剧在线观看| 亚洲日韩国产AV无码无码精品| 免费看少妇作爱视频| 爱情岛亚洲论坛在线观看| 免费人成在线观看网站品爱网日本| 色视频在线观看免费| 亚洲人成网77777色在线播放| 亚洲欧美日韩一区二区三区在线| 免费无码精品黄AV电影| 亚洲av色香蕉一区二区三区| 国产免费久久精品| 亚洲国产成人精品无码区在线秒播| 一色屋成人免费精品网站| 精品无码专区亚洲| 伊人亚洲综合青草青草久热| 免费在线中文日本| 亚洲男人天堂2022| 亚洲AV永久无码精品一区二区国产| 国内少妇偷人精品视频免费| 久久久久国产亚洲AV麻豆| 久9热免费精品视频在线观看| 亚洲另类小说图片| 亚洲国产综合久久天堂| 最近中文字幕大全免费视频| 亚洲精品无码久久久久YW| 亚洲无码在线播放| 日韩在线免费视频| 韩日电影在线播放免费版| 亚洲av午夜精品无码专区| 久久久久亚洲AV综合波多野结衣|