有关C#中重写按钮的onpaint函数,实现按钮形状的用户自定义

在使用C#进行界面开发的过程中,做界面开发经常会用到按钮,而C#界面中的按钮形状只有矩形的,而如果我们需要其他形状的按钮的话,就需要想点儿其他办法了,一般开发自己的控件有三种方法:

首先是复合控件,从字面上就可以理解,是在原有控件的基础上进行组合,组合后的控件就是一个全新的控件;

其次是扩展控件,一般控件都是用一个类进行了封装,我们可以通过继承该类,然后对其进行改写,赋予其新的特性;

最后是自定义控件,这个方法是“写我们自己的控件”,DIY的程度最高,当然对编程要求也最高,也是最灵活,最强大的方法;

 

本文先说说第二种方法的具体实现。

该方法是对原有的类进行改写,比如我们需要修改button的属性,可以对button类进行修改并继承,进行onpaint函数的重新改写。这样做的好处就是可以使得做出来的界面比较友好,在按钮的形状和颜色方面相比原来的会比较丰富一些。

具体的操作过程如下:

在VS2015下,新建类库,取名,确定。

然后引用动态库System.Windows.Forms:

添加如下代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Windows.Forms;
using System.ComponentModel;

namespace myNewButton
{
    public class colorfulButton:Button
    {
        
        Rectangle r= new Rectangle(0, 0, 150, 80);
        Rectangle r2 = new Rectangle(0,0,100,50);
        private Brush _myBrush = null;
        private Color _color1 = System.Drawing.Color.FromArgb(255, 255, 192);
        private Color _color2 = System.Drawing.Color.FromArgb(0, 0, 192);

        [Category("设置"), Description("渐变开始颜色")]
        public Color color1
        {
            get { return _color1; }
            set { _color1 = value; }
        }

        [Category("设置"), Description("渐变结束颜色")]
        public Color color2
        {
            get { return _color2; }
            set { _color2 = value; }
        }

        public void ButtonNew()
        {
            r = new Rectangle(0, 0, 150, 80);
            _myBrush = new LinearGradientBrush(r, _color1, _color2, LinearGradientMode.Vertical);
        }

        public Brush MyBrush
        {
            get { return _myBrush; }
            set { _myBrush = value; }
        }

        protected override void OnResize(EventArgs e)
        {
            base.OnResize(e);
            r = new Rectangle(0, 0, this.Width, this.Height);
            _myBrush = new LinearGradientBrush(r, _color1, _color2, LinearGradientMode.Vertical);
        }

        protected override void OnMouseLeave(EventArgs e)
        {
            base.OnMouseLeave(e);
            r = new Rectangle(0, 0, this.Width, this.Height);
            _myBrush = new LinearGradientBrush(r, _color1, _color2, LinearGradientMode.Vertical);
        }

        protected override void OnMouseEnter(EventArgs e)
        {
            base.OnMouseEnter(e);
            r = new Rectangle(0, 0, this.Width, this.Height);
            _myBrush = new LinearGradientBrush(r, _color2, _color1, LinearGradientMode.Vertical);
        }

        protected override void OnPaint(PaintEventArgs pevent)
        {
            base.OnPaint(pevent);
            Graphics g = pevent.Graphics;
            _myBrush = new LinearGradientBrush(r, _color1, _color2, LinearGradientMode.Vertical);
            g.FillRectangle(_myBrush,this.ClientRectangle);
            StringFormat strF = new StringFormat();
            strF.Alignment = StringAlignment.Center;
            strF.LineAlignment = StringAlignment.Center;
            g.DrawString(this.Text, this.Font, new SolidBrush(Color.Black), this.ClientRectangle, strF);
        }      
    }
}

 

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值