C#窗体Winform,使用实时图表:折线图、柱状图

时间:2024-11-08 07:43:58

如何在C#窗体中使用实时图表,这里需要用到Chart控件。先看下Demo效果图:

 

 

一、创建Winform窗体,并找到Chart控件

 

Chart控件,目前仅在.net framework下才有,.net core下暂时还没有。所以本文针对的环境是.net framework下的winform窗体。

如上图,在工具箱中找到“数据”->“Chart”控件。请注意,在“所有Windows窗体”那里,是找不到Chart控件的。

二、将Chart控件拖入到窗体中

 

然后设置Dock属性为Fill,效果如下图所示:

 

三、创建X轴变量名

 

如上图,找到Series属性,它表示X轴的变量,可以设置多个的,作为演示,我们仅选择简单的入门为主,即只使用一个X轴变量。

 

我们设置Series属性,名称叫做“次数”,图形使用连线方式。“确定”后效果如下图:

 

 

四、我们生成一些随机金额

为了让图表动态起来,我们假设每次的付款金额是有一个随机值的,那么X轴就是次数, Y轴就是每次的付款金额。

 

我们搞一个“启动”按钮在上面,双击该按钮,写入一些业务代码:

using System;
using ;
using ;
using ;
using ;
using ;
using ;
using ;
using ;
using ;
using ;

namespace WindowsFormsApp2
{
    public partial class BetForm : Form
    {
        /// <summary>
        /// 过往的金额
        /// </summary>
        private readonly List<double> _pastMoney;
        private double _maxAxisY, _minAxisY;

        public BetForm()
        {
            InitializeComponent();

            this._pastMoney = new List<double>();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            //启动一个后台线程
            (() =>
            {
                Random random = new Random();
                for (; ; )
                {
                    //生成一个四舍五入带2位小数点的随机金额
                    double yValue = (() * 100, 2, );

                    (yValue);
                }
            });
        }

        /// <summary>
        /// 每秒钟不停的更新图形,最多允许5个节点
        /// </summary>
        /// <param name="totalMoney"></param>
        private void UpdateChart(double totalMoney)
        {
            (new Action(() =>
            {
                Series serie = this.[0];

                ();
                if ( == 5)
                {
                    (0);
                    this._pastMoney.RemoveAt(0);

                    this._maxAxisY = this._pastMoney.Max(q => q);
                    this._minAxisY = this._pastMoney.Min(q => q);
                }

                if (this._maxAxisY < totalMoney)
                {
                    this._maxAxisY = totalMoney;
                }
                if (this._minAxisY > totalMoney)
                {
                    this._minAxisY = totalMoney;
                }

                //不断的更新图表的最大值和最小值范围,使得折线图总是显示最好看。
                this.[0]. = _maxAxisY;
                this.[0]. = _minAxisY;

                //仅修改Y轴的值
                (totalMoney);
                ();

                this._pastMoney.Add(totalMoney);
            }));

            (1000);
        }
    }
}

上面是完整代码,您可以直接复制使用。

五、最后看下demo效果图