• C# Chart表格多个ChartArea、Series显示滚动条ScrollBar随着数据的增加实时更新,显示区域始终在最右边
  • 当数据库中数据过多时,往往无法在一页中展示,所以非常需要一个滚动条来调节页面内容,那么C#chart控件如何实现滚动条? 还是以软件【银行业会计技能训练系统】为例,如下图,X轴内容较多,如何实现如下效果的...

    数据库中数据过多时,往往无法在一页中展示,所以非常需要一个滚动条来调节页面内容,那么C#chart控件如何实现滚动条?

    还是以软件【银行业会计技能训练系统】为例,如下图,X轴内容较多,如何实现如下效果的滚动条?

    用chart控件展示access数据库中内容.png

    方法及源码如下:

    本文基于文章【C#中chart控件如何连接并展示access数据库中特定内容】,在此基础上增加了滚动条功能。只需添加如下代码,即可实现X轴上的滚动条。

     

     chart1.ChartAreas["ChartArea1"].Area3DStyle.Enable3D = false;
     chart1.ChartAreas["ChartArea1"].Area3DStyle.LightStyle = LightStyle.Realistic;
     chart1.ChartAreas["ChartArea1"].BackColor = System.Drawing.Color.FromArgb(((System.Byte)(64)), ((System.Byte)(165)), ((System.Byte)(191)), ((System.Byte)(228)));
     chart1.ChartAreas["ChartArea1"].CursorX.AutoScroll = true;
     chart1.ChartAreas["ChartArea1"].AxisX.ScrollBar.Enabled = true;
     chart1.ChartAreas["ChartArea1"].CursorX.IsUserEnabled = true;
     chart1.ChartAreas["ChartArea1"].CursorX.IsUserSelectionEnabled = true;
     chart1.ChartAreas["ChartArea1"].AxisX.ScaleView.Zoomable = true;
     chart1.ChartAreas["ChartArea1"].AxisX.ScaleView.Position = 1;
     chart1.ChartAreas["ChartArea1"].AxisX.ScaleView.Size = 10;
     chart1.ChartAreas["ChartArea1"].AxisX.ScrollBar.ButtonColor = System.Drawing.Color.Silver;
     chart1.ChartAreas["ChartArea1"].AxisX.ScrollBar.LineColor = System.Drawing.Color.Black;

    本文由查霆原创,转载需授权。原文地址:http://www.zhating.cn/index.php/post/65.html

    展开全文
  • 更改前,如果chart首页面没有填满,滚动条一直默认显示在最左侧: //滚动条没满之前一直显示在最右边 Chart1.ChartAreas[0].AxisX.ScaleView.Scroll(ScrollType.Last); 增加该语句后,显示如下: ...

    更改前,如果chart首页面没有填满,滚动条一直默认显示在最左侧:

     

    //滚动条没满之前一直显示在最右边

    Chart1.ChartAreas[0].AxisX.ScaleView.Scroll(ScrollType.Last);

    增加该语句后,显示如下:

     

    展开全文
  • 本文源码下载地址:...研究了两天chart控件,终于有点眉目了。网上一搜一大堆,开始还是有点蒙的,毕竟这个控件的属性有点多啊。但是这么多属性竟然没有一个适合我的。在我的项目中,数...

    本文源码下载地址:https://download.csdn.net/download/zlk961543260/10740481(看到下载评论中说有错误,更新了一个下载地址。如果没有积分的朋友,留个邮箱,我看到后发给你们)

            研究了两天chart控件,终于有点眉目了。网上一搜一大堆,开始还是有点蒙的,毕竟这个控件的属性有点多啊。但是这么多属性竟然没有一个适合我的。在我的项目中,数据量上千,那么对于有限的x轴来说应该怎么整,用滚动条来做,但是一时半会还不知道怎么弄。后来偶然间得到一个程序发现跟我的挺契合的,拿来做了修改,今天在博客中给出一个demo供各位参考。

            首先来看看做出来的效果图吧!

        以上是两种效果,一种是全局的,一种是当前的,页面中有一个stop按钮。

     

    一、做到以上效果需要的控件。

    1.chart控件    (在本例中name为chart)          2.timer控件(本例中name为t)    3.combobox控件(name为combobox1)                 4.button控件(name为button_Stop)

    下面是该程序的代码,我就不多做解释了,都是一些属性。这些属性只有自己用一天或者几天才能明白,我在这说半天也是白扯。算了,还是说两句,chart是一个控件,控件中我们要画图,

    在什么地方画:chartArea。(这个属性特别的多)

    画的是啥呢:Series,,Series里存的是点的坐标,也就是x轴是啥,y轴是啥。(这个属性还好)

    代码:

    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;
    using System.Windows.Forms.DataVisualization.Charting; 
    
    namespace WindowsFormsApplication1
    {
        public partial class Form2 : Form
        {
            public Form2()
            {
                InitializeComponent();
            }
    
            Series series1;
            int sum = 1;
            bool flag = false;
            private void Form2_Load(object sender, EventArgs e)
            {
                createSeries();
                CreateChart();
                t.Start();
            }
    
            private void CreateChart()
            {
                ChartArea chartArea = new ChartArea();
                chartArea.Name = "FirstArea";
    
                chartArea.CursorX.IsUserEnabled = true;
                chartArea.CursorX.IsUserSelectionEnabled = true;
                chartArea.CursorX.SelectionColor = Color.SkyBlue;
                chartArea.CursorY.IsUserEnabled = true;
                chartArea.CursorY.AutoScroll = true;
                chartArea.CursorY.IsUserSelectionEnabled = true;
                chartArea.CursorY.SelectionColor = Color.SkyBlue;
    
                chartArea.CursorX.IntervalType = DateTimeIntervalType.Auto;
                chartArea.AxisX.ScaleView.Zoomable = false;
                chartArea.AxisX.ScrollBar.ButtonStyle = ScrollBarButtonStyles.All;//启用X轴滚动条按钮
    
                chartArea.BackColor = Color.AliceBlue;                      //背景色
                chartArea.BackSecondaryColor = Color.White;                 //渐变背景色
                chartArea.BackGradientStyle = GradientStyle.TopBottom;      //渐变方式
                chartArea.BackHatchStyle = ChartHatchStyle.None;            //背景阴影
                chartArea.BorderDashStyle = ChartDashStyle.NotSet;          //边框线样式
                chartArea.BorderWidth = 1;                                  //边框宽度
                chartArea.BorderColor = Color.Black;
    
    
                chartArea.AxisX.MajorGrid.Enabled = true;
                chartArea.AxisY.MajorGrid.Enabled = true;
    
                // Axis
                chartArea.AxisY.Title = @"Value";
                chartArea.AxisY.LabelAutoFitMinFontSize = 5;
                chartArea.AxisY.LineWidth = 2;
                chartArea.AxisY.LineColor = Color.Black;
                chartArea.AxisY.Enabled = AxisEnabled.True;
    
                chartArea.AxisX.Title = @"Time";
                chartArea.AxisX.IsLabelAutoFit = true;
                chartArea.AxisX.LabelAutoFitMinFontSize = 5;
                chartArea.AxisX.LabelStyle.Angle = -15;
    
    
                chartArea.AxisX.LabelStyle.IsEndLabelVisible = true;        //show the last label
                chartArea.AxisX.Interval = 10;
                chartArea.AxisX.IntervalAutoMode = IntervalAutoMode.FixedCount;
                chartArea.AxisX.IntervalType = DateTimeIntervalType.NotSet;
                chartArea.AxisX.TextOrientation = TextOrientation.Auto;
                chartArea.AxisX.LineWidth = 2;
                chartArea.AxisX.LineColor = Color.Black;
                chartArea.AxisX.Enabled = AxisEnabled.True;
                chartArea.AxisX.ScaleView.MinSizeType = DateTimeIntervalType.Months;
                chartArea.AxisX.Crossing = 0;
    
                chartArea.Position.Height = 85;
                chartArea.Position.Width = 85;
                chartArea.Position.X = 5;
                chartArea.Position.Y = 7;
    
                chart.ChartAreas.Add(chartArea);
                chart.BackGradientStyle = GradientStyle.TopBottom;
                //图表的边框颜色、
                chart.BorderlineColor = Color.FromArgb(26, 59, 105);
                //图表的边框线条样式
                chart.BorderlineDashStyle = ChartDashStyle.Solid;
                //图表边框线条的宽度
                chart.BorderlineWidth = 2;
                //图表边框的皮肤
                chart.BorderSkin.SkinStyle = BorderSkinStyle.Emboss;
    
            }
    
            private void createSeries()
            {
                //Series1
                series1 = new Series();
                series1.ChartArea = "FirstArea";
                chart.Series.Add(series1);
    
                //Series1 style
                series1.ToolTip = "#VALX,#VALY";    //鼠标停留在数据点上,显示XY值
    
                series1.Name = "series1";
                series1.ChartType = SeriesChartType.Spline;  // type
                series1.BorderWidth = 2;
                series1.Color = Color.Red;
                series1.XValueType = ChartValueType.Time;//x axis type
                series1.YValueType = ChartValueType.Int32;//y axis type
    
                //Marker
                series1.MarkerStyle = MarkerStyle.Square;
                series1.MarkerSize = 5;
                series1.MarkerColor = Color.Black;
    
                this.chart.Legends.Clear();
            }
    
    
            static int range = 0;
            Random r = new Random(6);
     
     
            //用来设置切换视图时的视角
            private void chart_SelectionRangeChanged(object sender, CursorEventArgs e)
            {
                //无数据时返回
                if (chart.Series[0].Points.Count == 0)
                    return;
    
                double start_position = 0.0;
                double end_position = 0.0;
                double myInterval = 0.0;
                start_position = e.NewSelectionStart;
                end_position = e.NewSelectionEnd;
                myInterval = Math.Abs(start_position - end_position);
                if (myInterval == 0.0)
                    return;
    
                //X轴视图起点
                chart.ChartAreas[0].AxisX.ScaleView.Position = Math.Min(start_position, end_position);
                //X轴视图长度
                chart.ChartAreas[0].AxisX.ScaleView.Size = myInterval;
                //X轴间隔
                if (myInterval < 11.0)
                {
                    chart.ChartAreas[0].AxisX.Interval = 1;
                }
                else
                {
                    chart.ChartAreas[0].AxisX.Interval = Math.Floor(myInterval / 10);
                }
                flag = true;
                if (!comboBox1.Items.Contains("Zoom"))
                {
                    comboBox1.Items.Add("Zoom");
                    comboBox1.SelectedItem = "Zoom";
                }
    
            }
    
            private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
            {
                if (comboBox1.SelectedItem.ToString() == "Zoom")
                {
                    flag = true;
                }
                else if (comboBox1.SelectedItem.ToString() == "OverView" || comboBox1.SelectedItem.ToString() == "Follow")
                {
                    comboBox1.Items.Remove("Zoom");
                    flag = false;
                }
            }
    
            private void t_Tick(object sender, EventArgs e)         //timer事件
            {
                if (flag)
                    return;
                else
                {
                    range = r.Next(1, 60);    //随机取数          
                    series1.Points.AddXY(sum, 5 + range);   //设置series点        
                    sum++;
                    if (comboBox1.SelectedItem.ToString() == "OverView")    //切换试图
                    {
                        chart.ChartAreas[0].AxisX.ScaleView.Position = 1;
                        if (sum > 10)
                        {
                            double max = chart.ChartAreas[0].AxisX.Maximum;
                            max = (sum / 10 + 1) * 10;
                            chart.ChartAreas[0].AxisX.Interval = max / 10;
                        }
                        chart.ChartAreas[0].AxisX.ScaleView.Size = sum * 1.1;
                        //chart.ChartAreas[0].AxisX.ScrollBar.ButtonStyle = ScrollBarButtonStyles.None;//启用X轴滚动条按钮
                    }
                    if (comboBox1.SelectedItem.ToString() == "Follow")
                    {
                        chart.ChartAreas[0].AxisX.Interval = 1D;
                        chart.ChartAreas[0].AxisX.ScaleView.Size = 10D;
                        if (sum <= chart.ChartAreas[0].AxisX.ScaleView.Size)
                            chart.ChartAreas[0].AxisX.ScaleView.Position = 1;
                        else
                            chart.ChartAreas[0].AxisX.ScaleView.Position = sum - chart.ChartAreas[0].AxisX.ScaleView.Size;
                    }
                }
            }
    
            private void button_Stop_Click_1(object sender, EventArgs e)  //切换停止开始按钮
            {
                switch (button_Stop.Text)
                {
                    case "Stop":
                        {
                            button_Stop.Text = "Start";
                            t.Stop();
                            break;
                        }
                    case "Start":
                        {
                            button_Stop.Text = "Stop";
                            t.Start();
                            break;
                        }
                }
            }
    
        }
        
    }
    

    最近看到有人发现全局试图和局部试图转换时不好用,但是在我自己这是好用的,这里提供三个方法:

    1、尝试用release模式下运行,如果不行,看第二点。

    2、将下面图片中代码注释掉,运行测试。

    3、此方法为评论中验证得知:把chart控件的chartareas和series两个集合清空。

     

    另外,评论中有人提问说x轴的时间怎么变化,下面解释一下,为什么之前的没有变化:

    上图中,x轴我们设置的类型是ChartValueType.Time类型,而我们在给x轴赋值的时候呢?看下图

    我们将sum赋值给了x,而sum是int类型,所以说,如果想要变化x轴,需要将两个类型设置一致即可。下图给出设置时间的更改方法:

    如上图操作,写法不固定。

     

    展开全文
  • 但是用ScrollBar的滚动条时,一按想拉回去看原来画的图滚动条就会消失,这是什么问题 ``` for (int num = 0; num ; num++) { this.chart1.ChartAreas[num].AxisX.Minimum = 0; this.chart1.ChartAreas...
  • 使C# chart的视图滚动

    2019-06-17 12:04:24
    2019独角兽企业重金招聘Python工程师标准>>> ...

    想实现类似示波器的效果.网上看了几个例子都是错的.,自己摸索了一下.

    注意这个代码有很多问题,记得要去设置chart1.ChartAreas[0].AxisX.Maximum, chart1.ChartAreas[0].AxisX.Minimum就好了.性能上,应该比clear所有点然后重新绘制快一些吧.

           private void button2_Click(object sender, EventArgs e)
           {
              chart1.Series[0].Points.AddXY(i++, r.NextDouble());
              if (i >= 10)
              {
                   chart1.Series[0].Points.RemoveAt(0);
                   chart1.ChartAreas[0].AxisX.Maximum++;
                   chart1.ChartAreas[0].AxisX.Minimum++;
               }
           }
    

    Update:好吧,找到彻底的解决方案了:chart1.ChartAreas[0].RecalculateAxesScale();

    Update:如何设置让横轴显示时间呢?

    Chart.ChartAreas["aaa"].AxisX.LabelStyle.IntervalType=DateTimeIntervalType.Days;
    Chart.ChartAreas["aaa"].AxisX.LabelStyle.Fomart="MM-dd";
    Chart2.Series["Series1"].XType=DateTime
    

    转载于:https://my.oschina.net/somereasons/blog/177415

    展开全文
  • namespace APP { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) ... chart1.ChartAreas["ChartArea1"].Axis...

    namespace APP
    {
    public partial class Form1 : Form
    {
    public Form1()
    {
    InitializeComponent();
    }

        private void Form1_Load(object sender, EventArgs e)
        {
            chart1.ChartAreas["ChartArea1"].AxisX.ScrollBar.IsPositionedInside = true;//显示滚动条的位置-图表区域内外设置
            此处也可以写0      代表ChartArea的编号
          //  chart1.ChartAreas[0].AxisY.ScrollBar.IsPositionedInside = true;//
          //chart1.ChartAreas["ChartArea1"].AxisY.ScrollBar.IsPositionedInside = true;//
         // chart1.ChartAreas["ChartArea1"].CursorX.AutoScroll = true;//超出图表区域后-出现滚动条
            chart1.ChartAreas["ChartArea1"].AxisX.ScrollBar.Enabled = true;//开启X轴滚动条
            chart1.ChartAreas["ChartArea1"].AxisX.ScrollBar.Size =20;//设置滚动条的宽度5-20
            chart1.ChartAreas["ChartArea1"].AxisX.ScrollBar.LineColor = Color.Black;//滚动条的边框线条颜色
            chart1.ChartAreas["ChartArea1"].AxisX.ScrollBar.BackColor = Color.White;//滚动条的  背景颜色          
          //chart1.ChartAreas["ChartArea1"].AxisX.ScrollBar.ButtonStyle= System.Windows.Forms.DataVisualization.Charting.ScrollBarButtonStyles.SmallScroll;//滚动条的样式-只显示左右
            chart1.ChartAreas["ChartArea1"].AxisX.ScrollBar.ButtonStyle = System.Windows.Forms.DataVisualization.Charting.ScrollBarButtonStyles.None;//滚动条的样式-不显示按钮
            chart1.ChartAreas["ChartArea1"].AxisX.ScrollBar.ButtonColor = System.Drawing.Color.Lime;//滚动条上的按钮颜色
            chart1.ChartAreas["ChartArea1"].AxisX.ScaleView.Zoomable = true;//启用缩放界面
           // chart1.ChartAreas["ChartArea1"].AxisX.ScaleView.Position = 50;//滚动条显示的位置
            chart1.ChartAreas["ChartArea1"].AxisX.ScaleView.Size = 20;//x坐标显示的个数------------控制这个数量的大小进行缩放
            //chart1.ChartAreas["ChartArea1"].AxisY.Maximum = 100;//设置Y轴最大值
            //chart1.ChartAreas["ChartArea1"].AxisY.Minimum = 0; //设置Y轴最小值
            //chart1.ChartAreas["ChartArea1"].AxisX.Maximum = 100;//设置Y轴最大值
            //chart1.ChartAreas["ChartArea1"].AxisX.Minimum = 0; //设置Y轴最小值
            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);
            }          
    
        }
    

    鼠标处理事件------------MouseEventArgs e------------在这里插入代码片--------------
    private void chart1_MouseEnter(object sender, MouseEventArgs e)
    {

            if (e.Delta > 0)//鼠标向上
            {
               if(chart1.ChartAreas["ChartArea1"].AxisX.ScaleView.Size<100)//判断显示的最大数值
                chart1.ChartAreas["ChartArea1"].AxisX.ScaleView.Size+=5;//+=5---滚动一次显示5个
    
                textBox4.Text = "++++";
                textBox5.Text = "";
            }
            else//鼠标向下滚动
            {
                if (chart1.ChartAreas["ChartArea1"].AxisX.ScaleView.Size > 1)
                    chart1.ChartAreas["ChartArea1"].AxisX.ScaleView.Size-=5;// - = 5---滚动一次减小显示5个
                textBox5.Text = "----";
                textBox4.Text = "";
            }
        }
    
        private void chart1_MouseEnter(object sender, EventArgs e)//当鼠标移动到控件上-发生的事件
        {
            MouseWheel += new MouseEventHandler(chart1_MouseEnter);//调用滚轮事件
        }
    }
    

    }

    展开全文
  • 对VS下的工具箱控件Chart的完整小例子,数据从所带的excel上直接读取,可缩放,添加x轴滚动条,并可隐藏、显示某条曲线,点击节点显示y轴值
  • C#chart控件动态显示

    2020-07-12 23:30:49
    C# 自带chart控件实现动态连续绘图,支持鼠标选中区域放大和缩小,点数过多时自动显示滚动条,图像显示滚动条的最右边及最新图像。
  • 现在要介绍的chart图表的放大与缩小功能,当图表要显示的数据量很多的时候,这时就需要这个放大与缩小的功能了。 先上一个图看效果: 当有几百个数量并在一起时,能看到一个总体的趋势。 图1 放大后的效果,...
  • 为了解决这个问题,查询了dev的demo后发现可以在横轴加一个滚动条,同事将横轴进行横向拉伸。 最后的实现效果如下: 设置X轴滚动条主要涉及到一下几个属性: 1)X轴滚动条启用属性EnableAxisXS
  • 对VS自带Chart控件的操作小例子。...x轴显示时间,为MM-dd HH:mm:ss:fff形式,间隔时间为0.5s,数据时间大于5s时出现x轴滚动框的形式展示数据。 例子基于vs2019的.net Framework 4.6,可运行。 有疑问可私信我。
  • 网上的都不能进行跨页面显示,项目中需要,就写了一个,发出来交流交流!
  • XYDiagram diagram = (XYDiagram)chartControl1.Diagram; // Define the visible range for the axes. diagram.AxisY.VisualRange.Auto = false; diagram.AxisY.VisualRange.Se
  • C#Chart控件

    2020-07-11 14:02:11
    本资源主要为c#中使用chart控件绘制曲线图,当数据量较大时,x轴出现滚动条,实现全局视图和滚动视图的功能
  • 这里介绍了一个最简单的实时显示数据的例子
  • 如图,多次放大后,想要一键撤回所有放大动作. 添加一个按钮. private void button2_Click(object sender, ... CHART_HisFlow.ChartAreas[0].AxisX.ScaleView.ZoomReset(0);//ZoomReset(0)表示撤销所有放大动作 ...
  • C# WinFrom Chart 图表控件的具体使用方法示例,加入X轴滚动条,采用日期时间坐标,可添加间隔日期的数据,折线与点共同存在,值得学习研究。
  • c# Chart设置样式

    2019-12-05 09:32:38
    能够对C# chart控件属性熟悉起帮助的code, 现在分享给大家,Chart Operate Demo Code Download,如有帮助,别忘点个赞. 有关MS_Chart的Control范围、ChartArea范围、InnerPlotArea范围,及Lengend、刻度与标签的...
1 2 3 4 5 ... 20
收藏数 767
精华内容 306