winform的chart控件实现

winform的chart控件实现X轴以时间为刻度且随时间变化且可滚轮缩放

示意图

设置X轴以时间为刻度
代码           

//显示格式为时:分:秒
AzTimeChart.ChartAreas[0].AxisX.Minimum = DateTime.Now.AddSeconds(-90).ToOADate(); // 设置X轴最小值和偏移量(这里是当前时间-90秒)  
AzTimeChart.ChartAreas[0].AxisX.Maximum = DateTime.Now.AddSeconds(10).ToOADate(); // 设置X轴最大值和偏移量(这里是当前时间+10秒)  
AzTimeChart.ChartAreas[0].AxisX.Interval = 5; // 设置X轴间隔(这里是5秒一个刻度)  
AzTimeChart.ChartAreas[0].AxisX.IntervalType = DateTimeIntervalType.Seconds; // 设置间隔类型为秒  
AzTimeChart.ChartAreas[0].AxisX.LabelStyle.Format = "HH:mm:ss"; // 设置X轴标签显示的时间格式
AzTimeChart.Series[0].SmartLabelStyle.Enabled = true;    // 这里是让标签根据密度转换风格
AzTimeChart.Series[0].XValueType = ChartValueType.DateTime; // 坐标轴type改为时间

// 刻度线显示
AzTimeChart.ChartAreas[0].AxisX.MajorGrid.Enabled = true;
AzTimeChart.ChartAreas[0].AxisX.MajorGrid.LineWidth = 1;
AzTimeChart.ChartAreas[0].AxisX.MajorGrid.LineColor = Color.LightGray;

添加节点

AzTimeChart.Series[0].Points.AddXY(DateTime, float);    // 第一个参数直接用DateTime类型的数据就行


X轴随时间变化更新
首先需要在设计界面添加一个Timer控件,属性栏有个闪电图标,点进去就是控件的事件列表,你的Tick旁边应该是空的,双击添加就行

在事件处理函数添加如下代码,实现X轴随时间变化更新

AzTimeChart.ChartAreas[0].AxisX.Minimum = DateTime.Now.AddSeconds(-90).ToOADate(); // 设置X轴最小值和偏移量(这里是当前时间-90秒)  
AzTimeChart.ChartAreas[0].AxisX.Maximum = DateTime.Now.AddSeconds(10).ToOADate(); // 设置X轴最大值和偏移量(这里是当前时间+10秒)
AzTimeChart.ChartAreas[0].AxisX.Interval = 5; // 设置X轴刻度间隔  
AzTimeChart.ChartAreas[0].AxisX.IntervalType = DateTimeIntervalType.Seconds; // 设置间隔类型为秒 
AzTimeChart.ChartAreas[0].AxisX.LabelStyle.Format = "HH:mm:ss"; // 设置X轴标签格式

滚轮缩放图表
chart控件并不支持wheel(滚轮)事件,这里我用的是Form的wheel事件进行处理,也可以用panel控件的whell事件进行处理,方法一样,一会再说,先放代码

首先添加事件处理函数 

// 处理鼠标滚轮事件
private void Form_MouseWheel(object sender, MouseEventArgs e)
{
    // 检查滚轮方向  
    if (e.Delta > 0)
    {
        // 滚轮向上滚动,放大图表  
        ZoomIn(AzTimeChart.ChartAreas[0].AxisX);
    }
    else
    {
        // 滚轮向下滚动,缩小图表  
        ZoomOut(AzTimeChart.ChartAreas[0].AxisX);
    }
}


然后在构造函数进行绑定
 

            // 处理滚轮事件
            this.MouseWheel += new MouseEventHandler(Form_MouseWheel);
接下来就是上滚和下滚的处理函数,这里是根据我的需求做的,你们根据实际情况来就行

 
 
        // 滚轮向上滚动,放大图表  
        // 这里其实就是缩小了X轴的范围,间隔不变
        private void ZoomIn(Axis axis)
        {
            if(_ATXMinNum < -10 || _ATXMaxNum > 1)
            {
                // _ATXMinNum和_ATXMaxNum  是定义了类的全局变量记录范围
                // 因为我X轴的正数和负数的比例为9:1,所以每滚动一下它们都按比例减小
                _ATXMinNum = _ATXMinNum - (int)(-10 * 0.9);
                _ATXMaxNum = _ATXMaxNum - (int)(10 * 0.1);
 
                AzTimeChart.ChartAreas[0].AxisX.Minimum = DateTime.Now.AddSeconds(_ATXMinNum).ToOADate(); // 设置X轴最小值(例如,过去一天)  
                AzTimeChart.ChartAreas[0].AxisX.Maximum = DateTime.Now.AddSeconds(_ATXMaxNum).ToOADate(); // 设置X轴最大值(例如,当前时间)  
                AzTimeChart.ChartAreas[0].AxisX.Interval = 5; // 设置X轴间隔(例如,每天一个刻度)  
                AzTimeChart.ChartAreas[0].AxisX.IntervalType = DateTimeIntervalType.Seconds; // 设置间隔类型为秒 
                AzTimeChart.ChartAreas[0].AxisX.LabelStyle.Format = "HH:mm:ss"; // 设置X轴标签格式
            }
        }
 
        // 滚轮向下滚动,缩小图表
        // 和上面一样的道理
        private void ZoomOut(Axis axis)
        {
            if (_ATXMinNum > -90 || _ATXMaxNum < 10)
            {
                _ATXMinNum = _ATXMinNum + (int)(-10 * 0.9);
                _ATXMaxNum = _ATXMaxNum + (int)(10 * 0.1);
 
                AzTimeChart.ChartAreas[0].AxisX.Minimum = DateTime.Now.AddSeconds(_ATXMinNum).ToOADate(); // 设置X轴最小值(例如,过去一天)  
                AzTimeChart.ChartAreas[0].AxisX.Maximum = DateTime.Now.AddSeconds(_ATXMaxNum).ToOADate(); // 设置X轴最大值(例如,当前时间)  
                AzTimeChart.ChartAreas[0].AxisX.Interval = 5; // 设置X轴间隔(例如,每天一个刻度)  
                AzTimeChart.ChartAreas[0].AxisX.IntervalType = DateTimeIntervalType.Seconds; // 设置间隔类型为秒 
                AzTimeChart.ChartAreas[0].AxisX.LabelStyle.Format = "HH:mm:ss"; // 设置X轴标签格式
            }
        }


其实我计时器触发函数那里的最大最小值也用的_ATXMinNum和_ATXMaxNum,这样滚轮事件处理过X轴范围后计时器函数那里也同步上了

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WinForm chart控件是一种用于在Windows Forms应用程序中显示图表的控件。它提供了丰富的功能和灵活性,能够帮助开发者轻松地创建各种类型的图表,例如折线图、柱状图、饼图等。 WinForm chart控件具有以下特点: 1. 数据绑定:可以通过数据绑定功能,将数据源与图表控件相关联,实现动态的数据显示和更新。 2. 各种图表类型:WinForm chart控件支持多种图表类型,包括折线图、柱状图、饼图等。开发者可以根据需要选择合适的图表类型,展示不同类型的数据。 3. 自定义样式:开发者可以自定义图表的样式,包括颜色、字体、边框等,以满足不同的设计要求。 4. 交互功能:WinForm chart控件支持用户交互功能,例如鼠标悬停显示数据标签、缩放、平移等。这使得用户能够更加直观地了解图表中的数据。 5. 数据分析功能:WinForm chart控件提供了丰富的数据分析功能,例如计算平均值、最大值、最小值等。这些功能能够帮助开发者深入分析和理解图表中的数据。 6. 打印和导出:WinForm chart控件支持打印和导出功能,开发者可以将图表保存为图像文件或打印出来,方便与他人共享和使用。 总之,WinForm chart控件是一款功能强大、易于使用的图表控件,通过它,开发者可以轻松地创建并展示各种类型的图表,为用户提供更好的数据可视化体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值