wxy新人小白 2019-07-08 17:52 采纳率: 31.3%
浏览 642
已采纳

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

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

  • 写回答

1条回答 默认 最新

  • threenewbee 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;
            }
        }
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 LiBeAs的带隙等于0.997eV,计算阴离子的N和P
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 来真人,不要ai!matlab有关常微分方程的问题求解决,
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算