首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

Winform按钮重绘有关问题

2013-08-04 
Winform按钮重绘问题 public enum ButtonType{/// summary/// 最小化/// /summaryMinimize,/// summa

Winform按钮重绘问题

 
public enum ButtonType
    {
        /// <summary>
        /// 最小化
        /// </summary>
        Minimize,
        /// <summary>
        /// 最大化
        /// </summary>
        Maximization,
        /// <summary>
        /// 关闭
        /// </summary>
        Close,
        /// <summary>
        /// 还原
        /// </summary>
        Restore
    }
    /// <summary>
    /// 按钮状态
    /// </summary>
    public enum ButtonState
    {
        /// <summary>
        /// 正常
        /// </summary>
        None,
        /// <summary>
        /// 鼠标滑过
        /// </summary>
        Hover,
        /// <summary>
        /// 按下
        /// </summary>
        Down
    }

    public class ToolsButton : Button
    {
        #region 私有字段
        private Image backImg;
        private Image hoverImg;
        private Image clickImg;
        private ButtonType type;
        private ButtonState state = ButtonState.None;


        #endregion

        #region 公有属性
        /// <summary>
        /// 
        /// </summary>
        public Image BackImg
        {
            get { return backImg; }
            set { backImg = value; }
        }
        /// <summary>
        /// 
        /// </summary>
        public Image HoverImg
        {
            get { return hoverImg; }
            set { hoverImg = value; }
        }
        /// <summary>
        /// 
        /// </summary>
        public Image ClickImg
        {
            get { return clickImg; }
            set { clickImg = value; }
        }
        /// <summary>
        /// 按钮类型
        /// </summary>
        public ButtonType Type
        {
            get { return type; }
            set { type = value; }
        }
        /// <summary>
        /// 按钮状态
        /// </summary>
        public ButtonState State


        {
            get { return state; }
            set { state = value; }
        }
        #endregion

        #region 构造函数
        public ToolsButton()
        {
            //默认构造函数
            InitializeComponent();
        }
        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="bType">按钮类型</param>
        /// <param name="width">宽度</param>
        /// <param name="height">高度</param>
        /// <param name="location">坐标</param>
        public ToolsButton(ButtonType bType, Point location)
        {
            type = bType;
            Location = location;
            FlatAppearance.BorderSize = 0;
            FlatStyle = FlatStyle.Flat;
            Anchor = AnchorStyles.Top | AnchorStyles.Right;
            switch (type)
            {
                case ButtonType.Minimize:
                    Width = 30;
                    Height = 22;
                    backImg = Image.FromFile(Application.StartupPath + "\\Resource\\Image\\Min.png");


                    hoverImg = Image.FromFile(Application.StartupPath + "\\Resource\\Image\\Min_OnHover.png");
                    clickImg = Image.FromFile(Application.StartupPath + "\\Resource\\Image\\Min_OnClick.png");
                    break;
                case ButtonType.Maximization:
                    Width = 30;
                    Height = 22;
                    backImg = Image.FromFile(Application.StartupPath + "\\Resource\\Image\\Max.png");
                    hoverImg = Image.FromFile(Application.StartupPath + "\\Resource\\Image\\Max_OnHover.png");
                    clickImg = Image.FromFile(Application.StartupPath + "\\Resource\\Image\\Max_OnClick.png");
                    break;
                case ButtonType.Close:
                    Width = 40;
                    Height = 22;
                    backImg = Image.FromFile(Application.StartupPath + "\\Resource\\Image\\Close.png");
                    hoverImg = Image.FromFile(Application.StartupPath + "\\Resource\\Image\\Close_OnHover.png");
                    clickImg = Image.FromFile(Application.StartupPath + "\\Resource\\Image\\Close_OnClick.png");
                    break;


                case ButtonType.Restore:
                    Width = 30;
                    Height = 22;
                    backImg = Image.FromFile(Application.StartupPath + "\\Resource\\Image\\Restore.png");
                    hoverImg = Image.FromFile(Application.StartupPath + "\\Resource\\Image\\Restore_OnHover.png");
                    clickImg = Image.FromFile(Application.StartupPath + "\\Resource\\Image\\Restore_OnClick.png");
                    break;
                default:
                    break;
            }
            InitializeComponent();
        }
        #endregion

        #region 方法
        private void InitializeComponent()
        {
            this.SuspendLayout();
            // 
            // ToolsButton
            // 
            this.Paint += new System.Windows.Forms.PaintEventHandler(this.CloseButton_Paint);
            this.ResumeLayout(false);

        }

        private void CloseButton_Paint(object sender, PaintEventArgs e)
        {
            Graphics g = e.Graphics;


            //g.DrawImage(, 0, 0);
            g.DrawImage(GetImage(),
                new Rectangle(0, 0, Width, Height),
                new Rectangle(0, 0, GetImage().Size.Width, GetImage().Size.Height),
                GraphicsUnit.Pixel);

        }

        private Image GetImage()
        {
            Image img = backImg;
            switch (state)
            {
                case ButtonState.None:
                    img = backImg;
                    break;
                case ButtonState.Hover:
                    img = hoverImg;
                    break;
                case ButtonState.Down:
                    img = clickImg;
                    break;
            }
            return img;
        }
        #endregion

        #region 事件

        protected override void OnMouseDown(MouseEventArgs mevent)
        {
            this.State = ButtonState.Down;


            this.InitializeComponent();
            base.OnMouseDown(mevent);
        }

        protected override void OnMouseHover(EventArgs e)
        {
            this.State = ButtonState.Hover;
            this.InitializeComponent();
            base.OnMouseHover(e);
        }

        protected override void OnMouseLeave(EventArgs e)
        {
            this.State = ButtonState.None;
            this.InitializeComponent();
            base.OnMouseLeave(e);
        }

        protected override void OnMouseUp(MouseEventArgs mevent)
        {
            this.State = ButtonState.Hover;
            this.InitializeComponent();
            base.OnMouseUp(mevent);
        }
        #endregion
    }



鼠标滑过时并没有重绘按钮 请问这是什么问题
[解决办法]

 protected override void OnMouseHover(EventArgs e)
{
    this.State = ButtonState.Hover;
    //this.InitializeComponent();
    //把this.InitializeComponent(); 换成this.Invalidate();
    base.OnMouseHover(e);
 }


热点排行