weixin_44138934
wxy新人小白
采纳率72%
2019-07-08 17:52 阅读 488

用C#自带的chart如何用代码实现一个chart中有2个饼形图

用C#自带的chart如何用代码实现一个chart中有2个饼形图,并可调整二个饼形图的位置,每个图下面还有标签。与下图效果类似,里面的圆环变为饼形图图片说明

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

1条回答 默认 最新

  • 已采纳
    caozhy 从今以后生命中的每一秒都属于我爱的人 2019-07-08 19:05

    图片说明

    给你完整做了一个,留下email,采纳本回答,发给你

    其他人如果也需要:https://download.csdn.net/download/caozhy/11296918

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Drawing;
    using System.Data;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    
    namespace Q768543
    {
        public partial class CycleProgressBar : UserControl
        {
            public CycleProgressBar()
            {
                InitializeComponent();
                this.DoubleBuffered = true;
            }
    
            private double _percentage = 0;
    
    
            public double Percentage 
            {
                get { return _percentage; }
                set { _percentage = value; this.Refresh(); }
            }
    
            public string Caption
            {
                get { return base.Text; }
                set { base.Text = value; this.Refresh(); }
            }
    
            private void CycleProgressBar_Paint(object sender, PaintEventArgs e)
            {
                Graphics g = e.Graphics;
                g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
                g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
                float wid = 20;
                float x = 0;
                float y = 0;
                float w = this.Width - x - wid;
                float footer = 60;
                float h = this.Height - y - wid - footer;
                if (w > h)
                {
                    w = h;
                    x = (this.Width - w - wid) / 2;
                }
                else
                {
                    h = w;
                    y = (this.Height - footer - h - wid) / 2;
                }       
                Pen pen1 = new Pen(Color.Blue, wid);
                Pen pen2 = new Pen(Color.Gray, wid);
                g.DrawEllipse(pen2, x + wid / 2.0f, y + wid / 2.0f, w, h);
                g.DrawArc(pen1, x + wid / 2.0f, y + wid / 2.0f, w, h, -90, (float)(Percentage * 360 / 100.0));
                g.FillEllipse(new SolidBrush(Color.White), x + wid / 2.0f, y + wid / 2.0f, w, h);
                var size = g.MeasureString(Percentage.ToString() + " %", this.Font);
                //g.DrawString(Percentage.ToString() + " %", this.Font, new SolidBrush(Color.Black), 
                //    x + wid / 2.0f + w / 2.0f - size.Width / 2.0f, y + wid / 2.0f + h / 2.0f - size.Height / 2.0f);
                g.DrawString(Percentage.ToString() + " %", this.Font, new SolidBrush(Color.Black),
                    Width / 2.0f - size.Width / 2.0f, y + wid / 2.0f + h / 2.0f - size.Height / 2.0f);
                size = g.MeasureString(Caption, this.Font);
                g.DrawString(Caption, this.Font, new SolidBrush(Color.Black),
                    Width / 2.0f - size.Width / 2.0f, Height - footer / 2.0f - size.Height / 2.0f);
            }
        }
    }
    
    

    以上封装一个控件,代码你无需管,调用在下面,非常简单:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    
    namespace Q768543
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
                this.cycleProgressBar1.Font = new Font(this.Font.Name, 15);
                this.cycleProgressBar1.Percentage = 100;
                this.cycleProgressBar1.Caption = "电量";
                this.cycleProgressBar2.Font = new Font(this.Font.Name, 15);
                this.cycleProgressBar2.Percentage = 100;
                this.cycleProgressBar2.Caption = "库存";
            }
    
            private void timer1_Tick(object sender, EventArgs e)
            {
                if (this.cycleProgressBar1.Percentage > 0)
                    cycleProgressBar1.Percentage -= 1.0;
                if (this.cycleProgressBar2.Percentage > 0)
                    cycleProgressBar2.Percentage -= 0.5;
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                timer1.Enabled = !timer1.Enabled;
            }
        }
    }
    
    
    点赞 1 评论 复制链接分享

相关推荐