C# Winform编程(10)Chart图表控件

news2024/11/18 19:30:16

Chart控件

  • Chart控件
  • Chart属性详述
  • Chart属性设置
    • 图表样式属性
    • 数据样式属性
    • 图例样式
    • 图标区样式
    • SeriesChartType类型
  • Chart控件鼠标滚轮事件特殊处理
  • Series绑定数据
  • 演示代码
  • 鼠标滚轮缩放图表示例
  • 参考引用

Chart控件

Chart控件是微软自带的一种图形可视化组件,使用简单灵活。在.NET4.0之后(即VS2010之后)已集成在了VS里面,直接拖拽控件到窗体即可使用。
需要使用命名空间:using System.Windows.Forms.DataVisualization.Charting;
主要包含如下集合

  • Chart
    • ChartAreas
    • Series
    • Titles
    • Legends
    • Annotations

Chart属性详述

C# Chart控件Demo在这里插入图片描述

Chart属性设置

图表样式属性

  • 元素渐变样式:Chart1.BackGradientStyle=System.Windows.Forms.DataVisualization.Charting.GradientStyle.TopBottom;
  • 背景辅助颜色:Chart1.BackSecondaryColor = System.Drawing.Color.Yellow;
  • 图像边框颜色:Chart1.BorderlineColor = System.Drawing.Color.Yellow;
  • 边框线样式:Chart1.BorderlineDashStyle=System.Windows.Forms.DataVisualization.Charting.ChartDashStyle.Solid;
  • 图像边框宽度:Chart1.BorderlineWidth = 3;
  • 边框外观样式:Chart1.BorderSkin.SkinStyle=System.Windows.Forms.DataVisualization.Charting.BorderSkinStyle.Emboss;
  • 图表背景颜色:Chart1.BackColor = System.Drawing.Color.Yellow;

数据样式属性

  • X轴的数据源: Chart1.Series[“Series1”].XValueMember = “name”;
  • Y轴的数据源: Chart1.Series[“Series1”].YValueMembers = “mobile”;
  • 设置颜色: Chart1.Series[“Series1”].Color = System.Drawing.Color.Red;
  • 图表类型:Chart1.Series[“Series2”].ChartType=System.Web.UI.DataVisualization.Charting.SeriesChartType.Line;
  • 是否在Chart中显示坐标点值:Chart1.Series[“Series1”].IsValueShownAsLabel = true;
  • 数据边框颜色:Chart1.Series[“Series1”].BorderColor = System.Drawing.Color.Red;
  • 图表背景颜色:Chart1.BackColor = System.Drawing.Color.Red;
  • 数据颜色:Chart1.Series[“Series1”].Color = System.Drawing.Color.Black;
  • 数据名称:Chart1.Series[“Series1”].Name = “数据1”;
  • 阴影偏移量:Chart1.Series[“数据1”].ShadowOffset = 1;
  • 阴影颜色:Chart1.Series[“数据1”].ShadowColor = System.Drawing.Color.PaleGreen;

图例样式

  • 图例的实例:Legend l = new Legend();
  • l.Alignment = System.Drawing.StringAlignment.Near;//设置图表的对齐方式(中间对齐,靠近原点对齐,远离原点对齐)
  • l.BackColor = System.Drawing.Color.Black;//设置图例的背景颜色
  • l.DockedToChartArea = “ChartArea1”;//设置图例要停靠在哪个区域上
  • l.Docking = System.Windows.Forms.DataVisualization.Charting.Docking.Bottom;//设置停靠在图表区域的位置(底部、顶部、左侧、右侧)
  • l.Font =new System.Drawing.Font(“Trebuchet MS”, 8.25F, System.Drawing.FontStyle.Bold);//设置图例的字体属性
  • l.IsTextAutoFit = true;//设置图例文本是否可以自动调节大小
  • l.LegendStyle = System.Windows.Forms.DataVisualization.Charting.LegendStyle.Column;//设置显示图例项方式(多列一行、一列多行、多列多行)
  • l.Name = “l1”;//设置图例的名称
  • Chart1.Legends.Add(l.Name);

图标区样式

  • Chart1.ChartAreas[“ChartArea1”].Name = “图表区域”;
  • Chart1.ChartAreas[“图表区域”].Position.Auto = true;//设置是否自动设置合适的图表元素
  • Chart1.ChartAreas[“图表区域”].ShadowColor = System.Drawing.Color.YellowGreen;//设置图表的阴影颜色
  • Chart1.ChartAreas[“图表区域”].Position.X=5.089137F;//设置图表元素左上角对应的X坐标
  • Chart1.ChartAreas[“图表区域”].Position.Y = 5.895753F;//设置图表元素左上角对应的Y坐标
  • Chart1.ChartAreas[“图表区域”].Position.Height = 86.76062F;//设置图表元素的高度
  • Chart1.ChartAreas[“图表区域”].Position.Width = 88F;//设置图表元素的宽度
  • Chart1.ChartAreas[“图表区域”].InnerPlotPosition.Auto = false;//设置是否在内部绘图区域中自动设置合适的图表元素
  • Chart1.ChartAreas[“图表区域”].InnerPlotPosition.Height = 85F;//设置图表元素内部绘图区域的高度
  • Chart1.ChartAreas[“图表区域”].InnerPlotPosition.Width = 86F;//设置图表元素内部绘图区域的宽度
  • Chart1.ChartAreas[“图表区域”].InnerPlotPosition.X = 8.3969F;//设置图表元素内部绘图区域左上角对应的X坐标
  • Chart1.ChartAreas[“图表区域”].InnerPlotPosition.Y = 3.63068F;//设置图表元素内部绘图区域左上角对应的Y坐标
  • Chart1.ChartAreas[“图表区域”].Area3DStyle.Inclination = 10;//设置三维图表的旋转角度
  • Chart1.ChartAreas[“图表区域”].Area3DStyle.IsClustered = true;//设置条形图或柱形图的的数据系列是否为簇状
  • Chart1.ChartAreas[“图表区域”].Area3DStyle.IsRightAngleAxes = true;//设置图表区域是否使用等角投影显示
  • Chart1.ChartAreas[“图表区域”].Area3DStyle.LightStyle = System.Web.UI.DataVisualization.Charting.LightStyle.Realistic;//设置图表的照明类型(色调随旋转角度改变而改变,不应用照明,色调不改变)
  • Chart1.ChartAreas[“图表区域”].Area3DStyle.Perspective = 50;//设置三维图区的透视百分比
  • Chart1.ChartAreas[“图表区域”].Area3DStyle.Rotation = 60;//设置三维图表区域绕垂直轴旋转的角度
  • Chart1.ChartAreas[“图表区域”].Area3DStyle.WallWidth = 0;//设置三维图区中显示的墙的宽度
  • Chart1.ChartAreas[“图表区域”].Area3DStyle.Enable3D = true;//设置是否显示3D效果
  • Chart1.ChartAreas[“图表区域”].BackColor = System.Drawing.Color.Green;//设置图表区域的背景颜色
  • Chart1.ChartAreas[“图表区域”].BackGradientStyle = System.Windows.Forms.DataVisualization.Charting.GradientStyle.LeftRight;//指定图表元素的渐变样式(中心向外,从左到右,从上到下等等)
  • Chart1.ChartAreas[“图表区域”].BackSecondaryColor = System.Drawing.Color.White;//设置图表区域的辅助颜色
  • Chart1.ChartAreas[“图表区域”].BorderColor = System.Drawing.Color.White;//设置图表区域边框颜色
  • Chart1.ChartAreas[“图表区域”].BorderDashStyle = System.Windows.Forms.DataVisualization.Charting.ChartDashStyle.Solid;//设置图像边框线的样式(实线、虚线、点线)
  • Chart1.ChartAreas[“图表区域”].AxisX.LabelStyle.Font = new System.Drawing.Font(“Trebuchet MS”, 8.25F, System.Drawing.FontStyle.Bold);//设置X轴下方的提示信息的字体属性
  • Chart1.ChartAreas[“图表区域”].AxisX.LabelStyle.Format = “”;//设置标签文本中的格式字符串
  • Chart1.ChartAreas[“图表区域”].AxisX.LabelStyle.Interval=5D;//设置标签间隔的大小
  • Chart1.ChartAreas[“图表区域”].AxisX.LabelStyle.IntervalType = System.Web.UI.DataVisualization.Charting.DateTimeIntervalType.Number;//设置间隔大小的度量单位
  • Chart1.ChartAreas[“图表区域”].AxisX.LineColor = System.Drawing.Color.White;//设置X轴的线条颜色
  • Chart1.ChartAreas[“图表区域”].AxisX.MajorGrid.Interval=5D;//设置主网格线与次要网格线的间隔
  • Chart1.ChartAreas[“图表区域”].AxisX.MajorGrid.IntervalType = System.Web.UI.DataVisualization.Charting.DateTimeIntervalType.Number;//设置主网格线与次网格线的间隔的度量单位
  • Chart1.ChartAreas[“图表区域”].AxisX.MajorGrid.LineColor = System.Drawing.Color.Snow;//设置网格线的颜色
  • Chart1.ChartAreas[“图表区域”].AxisX.MajorTickMark.Interval = 5D;//设置刻度线的间隔
  • Chart1.ChartAreas[“图表区域”].AxisX.MajorTickMark.IntervalType = System.Web.UI.DataVisualization.Charting.DateTimeIntervalType.Number;//设置刻度线的间隔的度量单位
  • Chart1.ChartAreas[“图表区域”].AxisY.IsLabelAutoFit = false;//设置是否自动调整轴标签
  • Chart1.ChartAreas[“图表区域”].AxisY.IsStartedFromZero = false;//设置是否自动将数据值均为正值时轴的最小值设置为0,存在负数据值时,将使用数据轴最小值
  • Chart1.ChartAreas[“图表区域”].AxisY.LabelStyle.Font = new System.Drawing.Font(“Trebuchet MS”, 8.25F, System.Drawing.FontStyle.Bold);//设置Y轴左侧的提示信息的字体属性
  • Chart1.ChartAreas[“图表区域”].AxisY.LineColor = System.Drawing.Color.DarkBlue;//设置轴的线条颜色
  • Chart1.ChartAreas[“图表区域”].AxisY.MajorGrid.LineColor = System.Drawing.Color.White;//设置网格线颜色
  • Chart1.ChartAreas[“图表区域”].AxisY.Maximum = getmax() + 100;//设置Y轴最大值
  • Chart1.ChartAreas[“图表区域”].AxisY.Minimum=0;//设置Y轴最小值

SeriesChartType类型

  • Point
  • FastPoint
  • Bubble
  • Line
  • Spline
  • StepLine
  • FastLine
  • Bar
  • StackedBar
  • StackedBar100
  • Column
  • StackedColumn
  • StackedColumn100
  • Area
  • SplineArea
  • StackedArea
  • StackedArea100
  • Pie
  • Doughnut
  • Stock
  • Candlestick
  • Range
  • SplineRange
  • RangeBar
  • RangeColumn
  • Radar
  • Polar
  • ErrorBar
  • BoxPlot
  • Renko
  • ThreeLineBreak
  • Kagi
  • PointAndFigure
  • Funnel
  • Pyramid

Chart控件鼠标滚轮事件特殊处理

 // 滚轮事件
 private void chart1_MouseWheel(object sender, MouseEventArgs e)
 {            
     Console.WriteLine("e.Delta:" + e.Delta);
     if (e.Delta > 0)//鼠标向上
     {
         if (chart1.ChartAreas["ChartArea1"].AxisX.ScaleView.Size < 100)//判断显示的最大数值
             chart1.ChartAreas["ChartArea1"].AxisX.ScaleView.Size += 5;//+=5---滚动一次显示5个
     }
     else//鼠标向下滚动
     {
         if (chart1.ChartAreas["ChartArea1"].AxisX.ScaleView.Size > 1)
             chart1.ChartAreas["ChartArea1"].AxisX.ScaleView.Size -= 5;// - = 5---滚动一次减小显示5个               
     }
 }

 private void chart1_MouseEnter(object sender, EventArgs e) // 当鼠标移动到控件上-触发事件
 {
     Console.WriteLine("Mouse Enter");
     MouseWheel += new MouseEventHandler(chart1_MouseWheel); // 调用滚轮事件
 }

Series绑定数据

int[] c = new int[100];
for (int i = 0; i < 100; i++)
{
    c[i] = 1;
    chart1.Series["Series1"].Points.DataBindY(c);//c的数据给Y,X=100
    // chart1.Series["Series1"].Points.DataBind(c);
    // chart1.Series["Series1"].Points.DataBindXY(c);
    // chart1.Series["Series1"].Points.DataBindY(c);
}      

演示代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Windows.Forms.DataVisualization.Charting;


namespace ChartDemo
{
    public partial class FormDemo : Form
    {
        public FormDemo()
        {
            InitializeComponent();
        }

        /// <summary>
        /// 加载窗体事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void FormDemo_Load(object sender, EventArgs e)
        {
            // Chart 区域
            chart1.BackColor = Color.NavajoWhite;
            chart1.BorderlineColor = Color.GreenYellow;
            chart1.BorderlineWidth = 5;
            chart1.Text = "Table";

            // Chart 标题
            chart1.Titles.Add("Chart 演示Demo");
            chart1.Titles[0].BackColor = Color.Gray;
            chart1.Titles[0].ForeColor = Color.Red;
            chart1.Titles[0].Font = new Font("微软黑体", 26f, FontStyle.Regular);

            
            // ChartAreas 区域
            chart1.ChartAreas[0].BackColor = Color.Black;
            chart1.ChartAreas[0].BorderColor = Color.Blue;

            // Axis 设置 X轴和Y轴最大最小值,可以为负数
            chart1.ChartAreas[0].AxisX.Maximum = 100;
            chart1.ChartAreas[0].AxisX.Minimum = 0;
            chart1.ChartAreas[0].AxisY.Maximum = 100;
            chart1.ChartAreas[0].AxisY.Minimum = -100;

            // AxisX  
            chart1.ChartAreas[0].AxisX.Title = "X轴";
            chart1.ChartAreas[0].AxisX.TitleFont = new Font("仿宋", 16f, FontStyle.Italic);
            chart1.ChartAreas[0].AxisX.TitleForeColor = Color.Blue;
            chart1.ChartAreas[0].AxisX.TitleAlignment = StringAlignment.Far;// Near Center  Far;
            chart1.ChartAreas[0].AxisX.Interval = 20;  // 格子间隔
            chart1.ChartAreas[0].AxisX.LineColor = Color.Green;
            chart1.ChartAreas[0].AxisX.LineWidth = 3;
            
            // AxisX 主要刻度,次要刻度 参数设置
            chart1.ChartAreas[0].AxisX.MajorTickMark.Interval = 10;
            chart1.ChartAreas[0].AxisX.MajorTickMark.LineColor = Color.Red;
            chart1.ChartAreas[0].AxisX.MinorTickMark.Interval = 5;
            chart1.ChartAreas[0].AxisX.MinorTickMark.LineColor = Color.YellowGreen;
            chart1.ChartAreas[0].AxisX.MinorTickMark.LineWidth = 1;
            
            // AxisX 主要网格,次要网格 参数设置
            chart1.ChartAreas[0].AxisX.MajorGrid.Interval = 5;
            chart1.ChartAreas[0].AxisX.MajorGrid.LineColor = Color.Red;
            chart1.ChartAreas[0].AxisX.MajorGrid.LineWidth = 2;
            chart1.ChartAreas[0].AxisX.MinorGrid.Enabled = true;
            chart1.ChartAreas[0].AxisX.MinorGrid.Interval = 1;
            chart1.ChartAreas[0].AxisX.MinorGrid.LineWidth = 1;
            chart1.ChartAreas[0].AxisX.MinorGrid.LineColor = Color.Gray;


            // AxisY
            chart1.ChartAreas[0].AxisY.Title = "Y轴";
            chart1.ChartAreas[0].AxisY.TitleFont = new Font("微软黑体", 24f, FontStyle.Bold);
            chart1.ChartAreas[0].AxisY.TitleForeColor = Color.Red;
            chart1.ChartAreas[0].AxisY.TitleAlignment = StringAlignment.Center;// Near Center  Far;



#if true    // 数据全部赋值为0,如果没有此步操作,没有更新数据之前不会显示图表内容。
            Random rand = new Random();
            chart1.Series[0].Points.Clear();
            for (int i = 0; i < 100; i++)
            {
                chart1.Series[0].Points.AddY(0);
            }
#endif
        }

        /// <summary>
        /// 更新图表数据
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button1_Click(object sender, EventArgs e)
        {
            Random rand = new Random();
            chart1.Series[0].Points.Clear();
            for (int i = 0; i < 100; i++)
            {
                chart1.Series[0].Points.AddY(rand.Next(-50, 50));
            }
        }

        /// <summary>
        /// 清除图标数据
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button2_Click(object sender, EventArgs e)
        {
            chart1.Series[0].Points.Clear();
            for (int i = 0; i < 150; i++)
            {
                chart1.Series[0].Points.AddY(0);
            }
        }

        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            string item = comboBox1.SelectedItem.ToString();

            Console.WriteLine();
            Console.WriteLine("selected text:" + comboBox1.SelectedText);
            Console.WriteLine("selected index:" + comboBox1.SelectedIndex);
            Console.WriteLine("selected value:" + comboBox1.SelectedValue);
            Console.WriteLine("selected item:" + comboBox1.SelectedItem.ToString());


            if (item == "Point")
            {
                chart1.Series[0].ChartType = SeriesChartType.Point;
            }
            else if (item == "FastPoint")
            {
                chart1.Series[0].ChartType = SeriesChartType.FastPoint;
            }
            else if (item == "Bubble")
            {
                chart1.Series[0].ChartType = SeriesChartType.Bubble;
            }
            else if (item == "Line")
            {
                chart1.Series[0].ChartType = SeriesChartType.Line;
            }
            else if (item == "Spline")
            {
                chart1.Series[0].ChartType = SeriesChartType.Spline;
            }
            else if (item == "StepLine")
            {
                chart1.Series[0].ChartType = SeriesChartType.StepLine;
            }
            else if (item == "FastLine")
            {
                chart1.Series[0].ChartType = SeriesChartType.FastLine;
            }
            else if (item == "Bar")
            {
                chart1.Series[0].ChartType = SeriesChartType.Bar;
            }
            else if (item == "StackedBar")
            {
                chart1.Series[0].ChartType = SeriesChartType.StackedBar;
            }
            else if (item == "StackedBar100")
            {
                chart1.Series[0].ChartType = SeriesChartType.StackedBar100;
            }
            else if (item == "Column")
            {
                chart1.Series[0].ChartType = SeriesChartType.Column;                
            }
            else if (item == "StackedColumn")
            {
                chart1.Series[0].ChartType = SeriesChartType.StackedColumn;
            }
            else if (item == "StackedColumn100")
            {
                chart1.Series[0].ChartType = SeriesChartType.StackedColumn100;
            }
            else if (item == "Area")
            {
                chart1.Series[0].ChartType = SeriesChartType.Area;
            }
            else if (item == "SplineArea")
            {
                chart1.Series[0].ChartType = SeriesChartType.SplineArea;
            }
            else if (item == "StackedArea")
            {
                chart1.Series[0].ChartType = SeriesChartType.StackedArea;
            }
            else if (item == "StackedArea100")
            {
                chart1.Series[0].ChartType = SeriesChartType.StackedArea100;
            }
            else if (item == "Pie")
            {
                chart1.Series[0].ChartType = SeriesChartType.Pie;
            }
            else if (item == "Doughnut")
            {
                chart1.Series[0].ChartType = SeriesChartType.Doughnut;
            }
            else if (item == "Stock")
            {
                chart1.Series[0].ChartType = SeriesChartType.Stock;
            }
            else if (item == "Candlestick")
            {
                chart1.Series[0].ChartType = SeriesChartType.Candlestick;
            }
            else if (item == "Range")
            {
                chart1.Series[0].ChartType = SeriesChartType.Range;
            }
            else if (item == "SplineRange")
            {
                chart1.Series[0].ChartType = SeriesChartType.SplineRange;
            }
            else if (item == "RangeBar")
            {
                chart1.Series[0].ChartType = SeriesChartType.RangeBar;
            }
            else if (item == "RangeColumn")
            {
                chart1.Series[0].ChartType = SeriesChartType.RangeColumn;
            }
            else if (item == "Radar")
            {
                chart1.Series[0].ChartType = SeriesChartType.Radar;
            }
            else if (item == "Polar")
            {
                chart1.Series[0].ChartType = SeriesChartType.Polar;
            }
            else if (item == "ErrorBar")
            {
                chart1.Series[0].ChartType = SeriesChartType.ErrorBar;
            }
            else if (item == "BoxPlot")
            {
                chart1.Series[0].ChartType = SeriesChartType.BoxPlot;
            }
            else if (item == "Renko")
            {
                chart1.Series[0].ChartType = SeriesChartType.Renko;
            }
            else if (item == "ThreeLineBreak")
            {
                chart1.Series[0].ChartType = SeriesChartType.ThreeLineBreak;
            }
            else if (item == "Kagi")
            {
                chart1.Series[0].ChartType = SeriesChartType.Kagi;
            }
            else if (item == "PointAndFigure")
            {
                chart1.Series[0].ChartType = SeriesChartType.PointAndFigure;
            }
            else if (item == "Funnel")
            {
                chart1.Series[0].ChartType = SeriesChartType.Funnel;
            }
            else if (item == "Pyramid")
            {
                chart1.Series[0].ChartType = SeriesChartType.Pyramid;
            }


        }
    }
}

运行效果
在这里插入图片描述

鼠标滚轮缩放图表示例

因为C#默认没有鼠标滚轮事件需要添加如下代码
private void InitializeComponent()
{
// 要添加的代码
this.chart1 = new System.Windows.Forms.DataVisualization.Charting.Chart();
}

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Windows.Forms.DataVisualization.Charting;

namespace ChartDemo
{
    public partial class FormChartPoint : Form
    {
        public FormChartPoint()
        {
            InitializeComponent();
            
        }

        public bool isMouseDown = false;
        public int lastMove = 0; // 用于记录鼠标上次移动的点,用于判断是左移还是右移
                                 // 初始化ScaleView,可根据首次出现在chart中的数据点数修改合适的值

        private void FormChartPoint_Load(object sender, EventArgs e)
        {
            chart1.ChartAreas[0].AxisX.ScaleView.Size = 5;
            // 设置不显示chart自带的滚动条
            chart1.ChartAreas[0].AxisX.ScrollBar.Enabled = false;
            chart1.ChartAreas[0].AxisY.ScrollBar.Enabled = false;
            // 注意不要开启X轴游标,默认不开启,如下设置false或者不设置下列参数
            chart1.ChartAreas[0].CursorX.IsUserEnabled = false;
            chart1.ChartAreas[0].CursorX.AutoScroll = false;
            chart1.ChartAreas[0].CursorX.IsUserSelectionEnabled = false;           

            chart1.ChartAreas[0].AxisX.Maximum = 200;
            chart1.ChartAreas[0].AxisX.Minimum = 0;
            chart1.ChartAreas[0].AxisY.Maximum = 200;
            chart1.ChartAreas[0].AxisY.Minimum = -100;

            Random rdm = new Random();            
            for (int i = 0; i < 120; i++)
            {
                chart1.Series[0].Points.AddY(rdm.Next(0, 100));
            }                 
        }

        /// <summary>
        /// 鼠标移动事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void chart1_MouseMove(object sender, MouseEventArgs e)
        {
            if (isMouseDown)
            {
                // 可更改(交换)如下加减1或if条件来设置鼠标移动时曲线移动方向
                if (lastMove != 0 && e.X - lastMove > 0)
                    chart1.ChartAreas[0].AxisX.ScaleView.Position += 1;  // 每次移动1
                else if (lastMove != 0 && e.X - lastMove < 0)
                    chart1.ChartAreas[0].AxisX.ScaleView.Position -= 1; // 每次移动1
                lastMove = e.X;
            }
        }

        /// <summary>
        /// 鼠标滚轮事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void chart1_MouseWheel(object sender, MouseEventArgs e)
        {
            // 实验发现鼠标滚轮滚动一圈时e.Delta = 120,正反转对应正负120
            if (chart1.ChartAreas[0].AxisX.ScaleView.Size > 0) // 防止越过左边界
            {
                chart1.ChartAreas[0].AxisX.ScaleView.Size += (e.Delta / 120); // 每次缩放1
            }
            else if (e.Delta > 0)
            {
                chart1.ChartAreas[0].AxisX.ScaleView.Size += (e.Delta / 120); // 每次缩放1
            }
        }

        /// <summary>
        /// 鼠标按下事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void chart1_MouseDown(object sender, MouseEventArgs e)
        {
            lastMove = 0;
            isMouseDown = true;
        }

        /// <summary>
        /// 鼠标抬起事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void chart1_MouseUp(object sender, MouseEventArgs e)
        {
            isMouseDown = false;
        }



        private void button1_Click(object sender, EventArgs e)
        {
            Random rd = new Random();
            chart1.Series[0].Points.Clear();
            chart1.Series[1].Points.Clear();
            chart1.Series[2].Points.Clear();
            for (int i = 0; i < 120; i++)
            {
                chart1.Series[0].Points.AddY(rd.Next(0, 500));
                chart1.Series[1].Points.AddY(rd.Next(0, 300));
                chart1.Series[2].Points.AddY(rd.Next(0, 200));
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            chart1.Series[0].ChartType = SeriesChartType.Column;
            chart1.Series[1].ChartType = SeriesChartType.Column;
            chart1.Series[2].ChartType = SeriesChartType.Column;
        }

        private void button3_Click(object sender, EventArgs e)
        {
            chart1.Series[0].ChartType = SeriesChartType.Line;
            chart1.Series[1].ChartType = SeriesChartType.Line;
            chart1.Series[2].ChartType = SeriesChartType.Line;
        }

        private void button4_Click(object sender, EventArgs e)
        {
            chart1.Series[0].ChartType = SeriesChartType.Spline;
            chart1.Series[1].ChartType = SeriesChartType.Spline;
            chart1.Series[2].ChartType = SeriesChartType.Spline;
        }

        private void button5_Click(object sender, EventArgs e)
        {
            chart1.Series[0].ChartType = SeriesChartType.StepLine;
            chart1.Series[1].ChartType = SeriesChartType.StepLine;
            chart1.Series[2].ChartType = SeriesChartType.StepLine;
        }

        private void button6_Click(object sender, EventArgs e)
        {
            chart1.Series[0].ChartType = SeriesChartType.Point;
            chart1.Series[1].ChartType = SeriesChartType.Point;
            chart1.Series[2].ChartType = SeriesChartType.Point;
        }

    }
}

在这里插入图片描述

参考引用

https://blog.csdn.net/Hi_niuniu/article/details/104369554?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.channel_param

一个比较好的网址,里面介绍winform控件,还有例子: https://docs.devexpress.com/WindowsForms/17530/controls-and-libraries/spreadsheet/examples/charts/how-to-show-or-hide-the-chart-legend
(来自https://blog.csdn.net/zhouyingge1104/article/details/105504889)
例子1:https://blog.csdn.net/quanlver/article/details/83035998
例子2:https://blog.csdn.net/qq_27825451/article/details/81305387
例子3:https://www.cnblogs.com/arxive/p/5861960.html
例子4:https://blog.csdn.net/xianfajushi/article/details/7493697?reload

例子5:https://recomm.cnblogs.com/blogpost/8259610
关于chart控件的一些知识点总结

chart的属性:https://www.cnblogs.com/arxive/p/5861960.html
chart的属性:inghttps://blog.csdn.net/weixin_41835916/article/details/83789061?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2allfirst_rank_v2~rank_v25-10-83789061.nonecase&utm_term=c#chart设置mark点

例子:https://blog.csdn.net/tr1912/article/details/72625034?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.channel_param

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1139581.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

node开发微信群聊机器人第⑤章

▍PART 序 看本文时&#xff0c;请确保前4章都已经看过&#xff0c;不然本章你看着看着思维容易跳脱&#xff01;再一个机器人教程只在公众号&#xff1a;“程序员野区”首发。csdn会跟着发一份&#xff0c;未经博主同意&#xff0c;请勿转载&#xff01;欢迎分享到自己的微信…

前端入门(一)JavaScript语法、数据类型、运算、函数

文章目录 概念JavaScript编写的位置基本语法数据类型变量声明var、let、constundefined与null的区别字符串类型数组Map和Set函数定义与参数传递 变量的作用域let、const方法的定义与调用常用内部对象json对象原型操作BOM对象操作DOM对象表单操作&#xff08;验证&#xff09;MD…

年轻人开发谁用默认背景?我直接美图安排上

文章目录 一、你还在用传统的开发界面吗二、年轻人的界面 1.动漫型2.偶像型3.提神型 三、更换背景的操作 第一步第二步第三步 一、你还在用传统的开发界面吗 不比不知道&#xff0c;一比吓一跳&#xff0c;都2023年了&#xff0c;你还在用Pycharm的默认背景写代码吗&#xf…

面试必考精华版Leetcode215. 数组中的第K个最大元素

题目&#xff1a; 代码&#xff08;2023年10月27日首刷看解析&#xff09;&#xff1a; class Solution { public:int findKthLargest(vector<int>& nums, int k) {return quickselect(nums,k);}int quickselect(vector<int>& nums,int k){vector<int&…

【Axure教程】中继器制作树元件

树元件在计算机科学和软件工程中常常用于构建和操作树形数据结构&#xff0c;提供了一种有效的方式来处理和查询具有层次性关系的数据&#xff0c;使开发人员能够更容易地组织和检索信息&#xff0c;用于组织和管理数据&#xff0c;具有各种应用。 那Axure里面也自带了一个树元…

C++中invoke与function的区别

C invoke invoke是C17标准引入的一个函数模板&#xff0c;用来调用可调用对象&#xff08;Callable Object&#xff0c;如函数指针、函数对象、成员函数指针等&#xff09;并返回结果。 invoke提供了统一的调用语法&#xff0c;无论可调用对象的类型是什么&#xff0c;都可以…

工业自动化产品抗干扰笔记

工业自动化产品抗干扰笔记 名词解释&#xff1a; 耦合矢量控制寄生振荡热噪点闪变噪点尖峰噪点反电势集肤效应交流电阻感抗容抗寄生电容共模与差模电场和磁场漏电流浪涌电压电流传输与电压传输各种地线解析 一、干扰来源&#xff1a; 任何一个电磁干扰现象都具有电磁干扰源…

大促期间的窜货低价怎么处理

产品窜货往往会伴随低价&#xff0c;所以监测窜货就是要先监测低价&#xff0c;当然有些产品卖价不低价也窜货&#xff0c;但这些正价或者高价卖的链接对渠道影响并不太大&#xff0c;所以治理低价窜货更重要。 力维网络专业为品牌提供窜货治理&#xff0c;低价监测的需求&…

NodeRed Modbus学习一(配置Modsim32)

新手小白 第一次使用这个玩意 会弹出一个小白框&#xff0c;不用管它。 新建File 下面两张图可以看出值在变化 通过下图可以看出还没有链接 创建连接 好了

在项目管理中,项目经理要控制这三个重要因素:进度、成本、质量

项目管理贯穿项目的整个生命周期&#xff0c;对项目的整个过程进行管理&#xff0c;对项目进行计划、组织、指导和控制的手段。 在项目的生命周期内&#xff0c;进行资源的配置和协调&#xff0c;做出科学决策&#xff0c;从而使项目执行的全过程处于最佳的运行状态&#xff…

04.Animation

参考JusterZhu视频和文档&#xff0c;ppt文档基本全抄 基本没看懂&#xff0c;过几天有时间了研究下 一、Animation 1.什么是Animation&#xff1f; 动画是快速循环播放一系列图像&#xff08;其中每个图像与下一个图像略微不同&#xff09;给人造成的一种幻觉。再回到WPF开发…

微信公众号分销商城源码系统+多商户入驻+互动直播+整点秒杀 带部署教程

今天罗峰来给大家分享一款微信公众号分销商城源码系统。微信公众号的普及以及电商行业的兴起&#xff0c;一种新型的商业模式——微信公众号分销商城应运而生。这种模式通过微信平台&#xff0c;将线上与线下的商业活动完美结合&#xff0c;为企业提供了更广阔的销售渠道。以下…

如何在群晖NAS中搭建WebDav服务,并实现公网访问

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏:《速学数据结构》 《C语言进阶篇》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 文章目录 1. 在群晖套件中心安装WebDav Server套件1.1 安装完成后&#xff0c;启动webdav服务&#xff0c;并勾选HTTP复选…

stable-diffusion-webui环境部署

stable-diffusion-webui环境部署 1. 环境创建2. 安装依赖库3.下载底模4.运行代码5. 报错信息报错1报错2 1. 环境创建 创建虚拟环境 conda create -n env_stable python3.10.0进入虚拟环境 conda activate env_stableclone源码 git clone https://github.com/AUTOMATIC1111/stab…

设备管理软件管理系统

从设备检查到设备保养&#xff0c;再到设备维护&#xff0c;全方位视角掌握设备状态的管理软件。让企业员工可以随时随地的查看设备的各种信息&#xff1a;巡检信息、保养计划、备件更换提醒、维修保养资料等。 1、一物一码&#xff0c;建立设备电子档案“身份证” 精准管控每一…

31 select max/min/avg/sum/count/group_concat 的实现

前言 avg, sum, max, min, count 的相关使用 这里来调试一下 具体的情况, 以及看一下 索引对于相关操作的影响 测试数据表如下 CREATE TABLE tz_test (id int(11) unsigned NOT NULL AUTO_INCREMENT,field1 varchar(12) DEFAULT NULL,field2 varchar(16) DEFAULT NULL,PRI…

漏洞复现--企望制造ERP系统 RCE

免责声明&#xff1a; 文章中涉及的漏洞均已修复&#xff0c;敏感信息均已做打码处理&#xff0c;文章仅做经验分享用途&#xff0c;切勿当真&#xff0c;未授权的攻击属于非法行为&#xff01;文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直…

ADB加密实例

ADB加密实例 1. adb shell加密访问2 adb文件传输命令加密访问 通常我们的MIFI USB端口仅枚举rndis和mass端口&#xff0c;为了便于开发人员、工厂维护人员调试和运营商认证&#xff0c;会预留出可通过SCSI指令切口支持ADB端口&#xff0c;该机制可能会被作为切入点破解侵入系统…

OA管理系统源码

OA管理系统源码 功能介绍 1、个人办公 a、内部邮件&#xff08;写邮件&#xff0c;收邮件&#xff0c;草稿箱&#xff0c;已删除&#xff0c;已发送&#xff09; b、Internet邮件&#xff08;写邮件&#xff0c;收邮件&#xff0c;草稿箱&#xff0c;已发送&#xff0c;已删…

Java实现人脸识别和指纹认证

我们在开发中经常会有人脸识别的需求&#xff0c;今天就实现一个简单的人脸识别&#xff0c;调用的第三方SDK服务 0.先去注册服务 登录网址 虹软视觉开放平台—以免费人脸识别技术为核心的人脸识别算法开放平台 点击进行注册 进入之后新增我的服务 成功之后点击首页人脸识别…