c#自定义控件(1)-gdi基础

本文档展示了如何使用C#创建一个自定义控件,利用GDI+进行图形绘制,包括画圆、矩形,并实现背景渐变色。代码详细注释了绘制过程,同时提供了当控件未出现在工具箱时的解决方法。

自定义控件,首先需要会使用GDI+绘制,下面是代码段基本各种常用的都有,注释也很清楚,然后工具箱中就会出现该控件

1.新建一个cs文件,继承Control在这里插入代码片

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

namespace ControlDraw
{
    /// <summary>
    /// 自定义控件
    /// </summary>
    class MyControl :Control/*1.这里需要继承Control基类*/
    {
        public MyControl()
        {
            //两种设定颜色的方式
            this.BackColor = Color.White;            
            this.BackColor = Color.FromArgb(255, 255, 255);
            //控件的大小
            this.Size = new Size(100, 100);
        }

        protected override void OnPaint(PaintEventArgs e)
        {
            //**描边的时候先使用brush涂色,在使用pen描边会避免上下边宽度不一样
            //调用父类
            base.OnPaint(e);

            //定义一个画布
            Graphics g = e.Graphics;

            //平滑模式
            g.SmoothingMode = SmoothingMode.HighQuality;
            //定义画笔,5.0f  为画笔的宽度
            Pen pen = new Pen(Color.Red,5.0f);

            //自定义颜色   120代表的是透明度
            Color color = Color.FromArgb(120, 255, 0, 0);
            //定义刷子
            Brush brush = new SolidBrush(Color.Blue);

            //画圆
            g.DrawEllipse(pen, 0, 0, 100, 100);
            //画矩形
            g.DrawRectangle(pen, 0, 0, 30, 30);
            //填充
            e.Graphics.FillEllipse(brush, 0, 0, 100, 100);

            //还可以使用using写法,自动释放资源
            using (Brush brush1 = new SolidBrush(Color.Red))
            {
                g.FillRectangle(brush, 0, 0, 100, 100);
            }

            #region 矩形缩放
            Rectangle rectangle = new Rectangle(0, 0, 100, 100);
            using (Pen p1 = new Pen(Color.Yellow, 5.0f))
            {

                //矩形向里缩放的距离,然后画椭圆
                rectangle.Inflate(10, 10);
                g.DrawEllipse(p1, rectangle);
            }
            #endregion
            pen.Dispose();
            g.Dispose();
        }
        //绘制背景色,背景色一般是不会改变的
        protected override void OnPaintBackground(PaintEventArgs pevent)
        {
            base.OnPaintBackground(pevent);
            Graphics g = pevent.Graphics;
            int w = this.Width, h = this.Height;
            Rectangle rect = new Rectangle(0, 0, w, h);
            //渐变色
            Brush lgbrush = new LinearGradientBrush(new Point(rect.Left, rect.Top)/*左上角*/,
                new Point(rect.Right, rect.Bottom),
                Color.FromArgb(255, 0, 0),
                Color.FromArgb(255, 255, 255)
                );
            using (lgbrush)
            {
                g.FillRectangle(lgbrush, rect);
            }
        }
    }
}

如果工具箱中没有该控件,则需要进行以下设置
如果自定义控件在工具箱里面没有的话可以在这里设置
效果图:
在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值