chartControl生成时间轴动态曲线

article/2025/11/5 17:55:32

首先将dev的chartControl拖到窗体中并设置父窗体停靠,然后手动添加一个seriies,如下图

初始化chartxiao

using DevExpress.XtraEditors;
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 DevExpress.XtraCharts;
using System.Threading;namespace jikong
{public partial class dynamiCurve : DevExpress.XtraEditors.XtraForm{readonly Random random = new Random();public dynamiCurve(){InitializeComponent();//Control.CheckForIllegalCrossThreadCalls = false;//testChart();secondTest();//Init();}private void checkedListBoxControl1_ItemCheck(object sender, DevExpress.XtraEditors.Controls.ItemCheckEventArgs e){MessageBox.Show( checkedListBoxControl1.SelectedItem.ToString());}#region 动态曲线private void secondTest() {chartControl1.Titles.Add(new ChartTitle());chartControl1.Titles[0].Text ="秒测试";//传入实际曲线名称#region 调整图例LineSeriesView lineSeriesView = new LineSeriesView();chartControl1.SeriesTemplate.View = lineSeriesView;//Legend的位置chartControl1.Legend.AlignmentHorizontal = DevExpress.XtraCharts.LegendAlignmentHorizontal.Left;chartControl1.Legend.AlignmentVertical = DevExpress.XtraCharts.LegendAlignmentVertical.TopOutside;chartControl1.Legend.Direction = DevExpress.XtraCharts.LegendDirection.RightToLeft;//x轴为时间轴diagram = (XYDiagram)chartControl1.Diagram;diagram.AxisX.DateTimeScaleOptions.MeasureUnit = DateTimeMeasureUnit.Millisecond;diagram.AxisX.DateTimeScaleOptions.ScaleMode = ScaleMode.Continuous;#endregionchartControl1.Series.Clear();seriesDynamic = new Series("变化曲线", ViewType.Spline);seriesDynamic.ArgumentScaleType = ScaleType.Auto;seriesDynamic.LabelsVisibility = DevExpress.Utils.DefaultBoolean.True;//chartControl1.Series.Add(seriesDynamic);chartControl1.SeriesSerializable = new Series[] { seriesDynamic };diagram.AxisX.GridLines.MinorVisible = true;diagram.AxisX.GridLines.Visible = true;diagram.AxisX.Label.TextPattern = "{A:HH:mm:ss}";diagram.AxisX.Title.Font = new System.Drawing.Font("Tahoma", 9F);diagram.AxisX.Title.Text = @"时间(分)";diagram.AxisX.Title.Visibility = 0;diagram.AxisX.VisibleInPanesSerializable = "-1";//???diagram.AxisX.WholeRange.Auto = true;diagram.AxisX.WholeRange.SideMarginsValue = 1;diagram.AxisX.Interlaced = false;//X轴交叉允许diagram.AxisY.WholeRange.AlwaysShowZeroLevel = false;//始终显示0水平线diagram.AxisY.Title.Font = new System.Drawing.Font("Tahoma", 9F);diagram.AxisY.Title.Text = @"随机数";diagram.AxisY.Title.Visibility = 0;diagram.AxisY.VisibleInPanesSerializable = "-1";//????}Series seriesDynamic;XYDiagram diagram;private void lineLoop() {while (true) {try{Thread.Sleep(900);DateTime argument = DateTime.Now;//x轴if (seriesDynamic.View is LineSeriesView){this.BeginInvoke(new Action(() => { seriesDynamic.Points.Add(new SeriesPoint(argument, Math.Round(random.NextDouble() * 100.0))); }));Console.WriteLine("添加点"+argument);}Thread.Sleep(50);DateTime minDate = argument.AddSeconds(-20);//x轴时间曲度,可视点数=(50+3)/时间间隔#region removePint pointsToRemoveCount = 0;if (seriesDynamic.Points.Count>22) {this.BeginInvoke(new Action(() => { seriesDynamic.Points.RemoveAt(0); }));//来不及移除的Console.WriteLine("移除点0到" + "剩余点数" + seriesDynamic.Points.Count);}//for (int i = 0; i < seriesDynamic.Points.Count; i++) {//    if (seriesDynamic.Points[i].DateTimeArgument < minDate)//    {                            //           pointsToRemoveCount++;//    }//}//if (pointsToRemoveCount < seriesDynamic.Points.Count)//{//    pointsToRemoveCount--;//}//if (pointsToRemoveCount > 0)//{//    this.BeginInvoke(new Action(() => { seriesDynamic.Points.RemoveRange(0, pointsToRemoveCount); }));//    Console.WriteLine("移除点0到"+pointsToRemoveCount+"剩余点数"+seriesDynamic.Points.Count);//}#endregion#region SETX this.BeginInvoke(new Action(() => {if (diagram != null && (diagram.AxisX.DateTimeScaleOptions.MeasureUnit == DateTimeMeasureUnit.Millisecond || diagram.AxisX.DateTimeScaleOptions.ScaleMode == ScaleMode.Continuous)){diagram.AxisX.WholeRange.SetMinMaxValues(minDate, argument);}}));#endregion}catch (Exception ex){MessageBox.Show(ex.ToString());Console.Write(ex);}}}#endregion#region 静态曲线private void testChart() {chartControl1.Titles.Add(new ChartTitle());chartControl1.Titles[0].Text = "A Point Chart";#region 调整图例chartControl1.Legend.AlignmentHorizontal = LegendAlignmentHorizontal.RightOutside; //获取或设置图表控件中的图例的水平对齐方式。chartControl1.Legend.AlignmentVertical = LegendAlignmentVertical.Top;//获取或设置图表控件中的图例的竖直对齐方式。chartControl1.Legend.Direction = LegendDirection.BottomToTop;//获取或设置在该图例中显示系列名称的方向。chartControl1.Legend.Visibility = DevExpress.Utils.DefaultBoolean.True;//是否在图表上显示图例#endregionSeries series1 = CreateSeries("Series 1");//创建系列Series series2 = CreateSeries("Series 2");chartControl1.Series.Add(series1);// Add the series to the chart.将点系列加入图表控件chartControl1.Series.AddRange(new Series[] { series2 });//Diagram 对象等于 null (在 Visual Basic 中为 Nothing),直到图表至少拥有一个系列。SetDiagarm(chartControl1);//设置图像//CreateAxisY(series2, chartControl1);// Add points to it.series1.Points.Add(new SeriesPoint(1, 10));series1.Points.Add(new SeriesPoint(2, 22));series1.Points.Add(new SeriesPoint(3, 14));series1.Points.Add(new SeriesPoint(4, 27));series1.Points.Add(new SeriesPoint(5, 15));series1.Points.Add(new SeriesPoint(6, 28));series1.Points.Add(new SeriesPoint(7, 15));SeriesPoint spoint = new SeriesPoint(8, 33);spoint.Color = Color.Red;//定制点的颜色series1.Points.Add(spoint);//系列2采用DataTable绑定// Create an empty table.DataTable table = new DataTable("Table1");// Add two columns to the table.table.Columns.Add("Argument", typeof(Int32));table.Columns.Add("Value", typeof(Int32));// Add data rows to the table.Random rnd = new Random();DataRow row = null;for (int i = 0; i < 10; i++){row = table.NewRow();row["Argument"] = i;row["Value"] = rnd.Next(30);table.Rows.Add(row);}// Specify data members to bind the series.series2.ArgumentScaleType = ScaleType.Numerical;series2.ArgumentDataMember = "Argument";//设置参数数据字段的名称series2.ValueScaleType = ScaleType.Numerical;series2.ValueDataMembers.AddRange(new string[] { "Value" });series2.DataSource = table;}/// <summary>/// 创建系列/// </summary>/// <param name="Caption">图形标题</param>/// <returns></returns>private Series CreateSeries(string Caption){// Create a point series.创建一个点系列Series series1 = new Series(Caption, ViewType.Line);series1.CrosshairEnabled = DevExpress.Utils.DefaultBoolean.True; //获取或设置一个值,该值指定此系列是否启用十字准线游标。series1.CrosshairLabelVisibility = DevExpress.Utils.DefaultBoolean.True;//指定是否在特定的2D DEVExt.xCARTARTSs系列的图表上显示十字准线标签。series1.CrosshairLabelPattern = "坐标:({A},{V})";//获取或设置一个字符串表示指定要在当前系列的瞄准线标签中显示的文本的模式series1.CrosshairHighlightPoints = DevExpress.Utils.DefaultBoolean.Default;//获取或设置一个值,该值指定当十字准线光标悬停时,系列点是否突出显示。// Set the numerical argument scale type for the series,as it is qualitative, by default.series1.ArgumentScaleType = ScaleType.Numerical;   //指定系列的参数刻度类型。默认为(ScaleType.Auto)X轴series1.ValueScaleType = ScaleType.Numerical;  //指定系列的取值刻度类型 Y轴series1.LabelsVisibility = DevExpress.Utils.DefaultBoolean.True;  //是否显示系列点标签series1.LegendText = Caption;//设置标志系列的图例文本//调整 系列点标签PointSeriesLabel myLable1 = (PointSeriesLabel)series1.Label;myLable1.Angle = 0;//获取或设置控制数据点标签位置的角度myLable1.TextPattern = "{S}({A},{V})";//获取或设置一个字符串,该字符串表示指定要在系列标注标签中显示的文本的模式。myLable1.Position = PointLabelPosition.Outside;//获取或设置点标记所在的位置。myLable1.ResolveOverlappingMode = ResolveOverlappingMode.Default;//启用系列标签的自动冲突检测和解决// 点系列视图属性设置PointSeriesView myView1 = (PointSeriesView)series1.View;//转换系列的视图类型为点类型myView1.PointMarkerOptions.Kind = MarkerKind.Star;//标记的形状myView1.PointMarkerOptions.StarPointCount = 5;//设置星形标记具有的点数myView1.PointMarkerOptions.Size = 8;//标记大小//在不同的窗格中显示系列//myView1.Pane—— 在 属性 窗口中展开 XYDiagramSeriesViewBase.Pane 属性的下拉菜单,并单击 New pane(新建窗格) 菜单项。return series1;}/// <summary>/// 创建图表的第二坐标系/// </summary>/// <param name="series">Series对象</param>/// <returns></returns>private SecondaryAxisY CreateAxisY(Series series, ChartControl chartControl){// Create secondary axes, and add them to the chart's Diagram.SecondaryAxisY myAxis = new SecondaryAxisY(series.Name);((XYDiagram)chartControl.Diagram).SecondaryAxesY.Add(myAxis);// Assign the series2 to the created axes.((PointSeriesView)series.View).AxisY = myAxis;//为当前系列指定Y轴myAxis.Title.Text = "A Secondary Y-Axis";myAxis.Title.Alignment = StringAlignment.Far; //顶部对齐myAxis.Title.Visibility = DevExpress.Utils.DefaultBoolean.True;myAxis.Title.Font = new Font("宋体", 9.0f);series.View.Color = Color.Green;Color color = series.View.Color;//设置坐标的颜色和图表线条颜色一致myAxis.Title.TextColor = color;myAxis.Label.TextColor = color;myAxis.Color = color;return myAxis;}/// <summary>/// 图像设置/// </summary>/// <param name="pointChart">图表控件</param>private void SetDiagarm(ChartControl pointChart){// Access the diagram's properties.把 Diagram 对象转换为所需的图象类型XYDiagram diagram = (XYDiagram)pointChart.Diagram;diagram.Rotated = false;//图像是否旋转diagram.EnableAxisXScrolling = true;//X轴是否允许滚动diagram.EnableAxisXZooming = true;//X轴是否允许缩放diagram.PaneLayout.Direction = PaneLayoutDirection.Vertical;//窗格的对齐方式// Customize the appearance of the X-axis title.调整 X-轴AxisX xAxis = diagram.AxisX;//获取X轴xAxis.Alignment = AxisAlignment.Near;//指定轴相对于另一主轴的位置。属性 AxisAlignment.Zero 设置仅对主轴可用xAxis.Title.Text = "X轴";//设置轴标题xAxis.Title.Visibility = DevExpress.Utils.DefaultBoolean.True; //是否显示轴标题xAxis.Label.TextPattern = "";//防止过长的轴标签产生重叠xAxis.Label.Angle = 0;//设置轴标签文本旋转的角度xAxis.Label.EnableAntialiasing = DevExpress.Utils.DefaultBoolean.Default;//获取或设置是否对轴标签的文本应用反走样(平滑)xAxis.Label.Staggered = false;//轴标签是否是交错排列的//轴取值的范围是自动确定的(当启用了  xAxis.WholeRange.Auto 属性时),也可以人工指定两个轴取值来限定轴的范围//xAxis.WholeRange.Auto = false;//xAxis.WholeRange.MaxValue = 70;//xAxis.WholeRange.MinValue = -70;//通过 AxisBase.Logarithmic 和 AxisBase.LogarithmicBase 属性,以对数来呈现轴的取值。//xAxis.Logarithmic = true;//xAxis.LogarithmicBase = 10;// Create a constant line. 设置常数线//ConstantLine constantLine1 = new ConstantLine("Constant Line 1");//xAxis.ConstantLines.Add(constantLine1);// Create a strip with its maximum and minimum axis value defined.数值带xAxis.Strips.Add(new Strip("Strip 1", 2, 9));// Enable automatic scale breaks creation, and define their maximum number.启用自动刻度分隔线diagram.AxisY.AutoScaleBreaks.Enabled = true;diagram.AxisY.AutoScaleBreaks.MaxCount = 559;// Add scale breaks to the Y-axis collection, with their Edge1 and Edge2 properties defined in the constructor.人工把刻度分隔线插入到轴中diagram.AxisY.ScaleBreaks.Add(new ScaleBreak("Scale Break 1", 110, 100));diagram.AxisY.ScaleBreaks.Add(new ScaleBreak("Scale Break 2", 110, 2000));// Customize the appearance of the axes' grid lines.网格显示和设置diagram.AxisY.GridLines.Visible = true;diagram.AxisY.GridLines.MinorVisible = true;diagram.AxisX.GridLines.Visible = true;diagram.AxisX.GridLines.MinorVisible = true;// Customize the appearance of the axes' tickmarks.刻度线显示和设置diagram.AxisY.Tickmarks.Visible = false;diagram.AxisY.Tickmarks.MinorVisible = false;//定制窗格的滚动条的外观ScrollBarOptions scrollBarOptions = diagram.DefaultPane.ScrollBarOptions;scrollBarOptions.BackColor = Color.White;scrollBarOptions.BarColor = Color.Blue;scrollBarOptions.BorderColor = Color.Navy;scrollBarOptions.BarThickness = 25;scrollBarOptions.XAxisScrollBarAlignment = ScrollBarAlignment.Far;scrollBarOptions.XAxisScrollBarVisible = true;// Obtain a diagram and clear its collection of panes.diagram.Panes.Clear();// Create a pane for each series.for (int i = 1; i < pointChart.Series.Count; i++){XYDiagramPane pane = new XYDiagramPane("The Pane's nnnName");diagram.Panes.Add(pane);XYDiagramSeriesViewBase view = (XYDiagramSeriesViewBase)pointChart.Series[i].View;view.Pane = pane;}AxisY myAxis = ((XYDiagram)pointChart.Diagram).AxisY;}#endregionprivate void dynamiCurve_Load(object sender, EventArgs e){timer1.Enabled = false;Task t = new Task(() => { lineLoop(); });t.Start();}private void timer1_Tick(object sender, EventArgs e){//RealtimeChart();lineLoop();}private void dynamiCurve_FormClosing(object sender, FormClosingEventArgs e){Environment.Exit(0);}}
}

 效果如下

 

 


http://chatgpt.dhexx.cn/article/gvpg7mjk.shtml

相关文章

DevExpress ChartControl 折线图简单使用

c# DevExpress ChartControl 折线图简单使用 DevExpress ChartControl折线图简单使用 DevExpress ChartControl折线图简单使用 1、界面放一个panel控件 2、定义一个DataTable 存储数据 3、获取数据后放在DataTable DataTable 定义&#xff1a; DataTable res_data new DataTa…

DevExpress之ChartControl用法

DevExpress中的ChartControl顾名思义就是数据基于图表展示&#xff0c;其关键在于Series上的处理。 using System; using System.Drawing; using DevExpress.XtraCharts;namespace DevExpressUtilHelpV3 { public static class ChartToolV3 { /// <summary> /// 创建Seri…

ChartControl控件绘制折线图

新建DevExpress窗体 SQLServer数据库中的数据如下&#xff1a; 拖入XtraTabControl控件&#xff0c;并修改Text属性 分别拖入GridControl控件和ChartControl控件 在GridControl控件中点击Run Designer,添加三列数据并分别设置FieldName(与数据库中对应) 在chartcontrol控件中…

DevExpress chartControl 数据绑定

DevExpress chartControl 数据绑定 chartControl 数据绑定ChartControl直接绑定Series 绑定例程附件 chartControl 数据绑定 这里介绍两种绑定方式ChartControl直接绑定以及ChartControl里的series绑定 ChartControl直接绑定 通过chartControl的DataSource属性直接bingdings…

DevExpress ChartControl 实现多轴

先看成图 如果是您需要的效果&#xff0c;请往后看&#xff1a; //曲线 Color[] Colorlist new Color[7] { Color.FromArgb(255, 79, 129, 189), Color.FromArgb(255, 192, 80, 77), Color.FromArgb(255, 155, 187, 89), Color.FromArgb(255, 128, 100, 162), Col…

chartControl

关键代码&#xff1a; /// <summary>/// 设置X轴Title/// </summary>/// <param name"chart">ChartControl</param>/// <param name"titleText">Title文字</param> /// <param name"titleColor">Titl…

Dev ChartControl

1、ChartControl 绘制曲线图&#xff0c;横坐标表示距离起点距离&#xff0c;纵坐标表示高程&#xff0c;均为double类型值&#xff0c;定义一个数据源的类。 /// <summary>/// 画图控件数据源/// </summary>public class ChartDatasource{/// <summary>/// …

ChartControl控件

ChartControl控件 ChartControl控件是一个可视化的图表控件&#xff0c;它支持你能想到的所有图形。用于对统计数据的可视化显示。最近我摸索了PivotGridControl控件与ChartControl控件的配合使用。本文简单的描述一下ChartControl控件。 常用的图表类型 通过代码设置图形 //条…

DevExpress中使用ChartControl绘制折线图和导出图表为Excel文件

一、实现效果 ①手动创建线性图表(添加图表标题) ②绘制单条线性图(可实现设置X和Y轴名称、绑定数据、缩放、复选框勾选是否显示、查看指定点信息) ③绘制多条线性图可实现设置X和Y轴名称、绑定数据、缩放、复选框勾选是否显示、查看指定点信息) ④导出图表为Excel 二、…

DEV控件之ChartControl用法

一、总体概述 这个控件包含3层&#xff0c;最外面的chartControl层、中间的XYDiagram层、最里面的Series层。功能非常强大&#xff0c;但同时使用起来也相对复杂&#xff0c;需要各个层之间相互协调设置才能达到自己想要的效果。 二、chartControl层 像DEV的其它控件一样&#…

C# DevExpress组件 - ChartControl图表控件

C# DevExpress组件 - ChartControl图表控件学习-整体感知&#xff08;一&#xff09; 1 逻辑框架图梳理 以逻辑框架图&#xff0c;进行代码验证 2 代码实现 2.1 实现内容 代码实现&#xff1a;添加一个ChartControl图表控件&#xff0c;并提供显示三个变量显示在三个位置 …

C# DevExpress ChartControl用法总结

C# DevExpress ChartControl用法总结 ₯近期使用C#DevExpress制作看板时用到过的ChartControl中的相关图表&#xff0c;在此做个记录&#xff08;未完&#xff09;。 1、Bar&#xff08;柱形图&#xff09; Series series1 new Series("日期", ViewType.Bar) …

DevExpress chartControl 基本结构说明

chartControl 使用教程及chart数据绑定 DevExpress说明ChartControl 结构series 主要Diagram 主要Chart TitlesLegendsAnnotations DevExpress说明 DevExpress是一个功能强大的跨平台控件库&#xff0c;支持winform、VB、WPF、UWP、asp等等&#xff0c; chart图是软件开发中常…

Dev中ChartControl——属性熟悉与简单应用

图表元素之间的关系&#xff1a; 根据DevExpress帮助文档中描述&#xff1a; 创建点图&#xff1a; 1、创建图表 /// <summary> /// 创建图表 /// </summary> private void CreatChart() {// Create a new chart.图表控件ChartControl pointChart new ChartCon…

运用getParameterNames()方法和getParameterValues()方法获取请求参数名称和内容

一.例子代码&#xff1a; 填写信息页面&#xff1a; <!DOCTYPE html> <html> <head> <meta charset"UTF-8"> <title>Insert title here</title> </head> <body> <form action"request_demo04.jsp" m…

使用 String[] values = request.getParameterValues(key);出现的问题 ,Ajax Post 提交数组参数后台无法接收

ajax向服务器提交数组参数多了一个中括号 String[] values request.getParameterValues(key); $.post({}) 直接传递数组会导致如下情况 // 使用一下js会导致如图这种情况var ids [];$(input[name"ids"]:checked).each(function(){ids.push($(this).val());})$.po…

springboot 防止xss 和sql 注入 改写 http 请求 getParameter,getParameterValues,getHeader等方法 有点东西

目录 1.springboot 启动类 引入 过滤器配置 2.过滤器 3.XssAndSqlHttpServletRequestWrapper包装器 包装类 4.修改验证登录代码 这里只写了基础的 了解意思即可 5.测试内容 6.测试结果 7.反黑客小介绍&#xff08;黑客大哥们好小弟这没啥大用O(∩_∩)O~&#xff0c;但…

java web中request.getParameterValues()和request.getParameter()异同

JavaWeb中获取表单的多行值采用request.getParameterValues(&#xff09;方法&#xff0c;request.getParameter()方法获取单个值 <!DOCTYPE html> <html lang"zh_CN"> <head><meta charset"UTF-8"><title>Title</title…

Jsp中getParameter、getParameterValues、getParameterNames和getParameterMap用法详解

以下是一个简单的jsp注册页面&#xff0c;从前端提交的数据 <% page language"java" import"java.util.*" pageEncoding"UTF-8"%> <% String path request.getContextPath(); String basePath request.getScheme()"://"re…

req.getParameterValues 输出前端乱码

前端页面 <% page contentType"text/html;charsetUTF-8" language"java" %> <html> <head><title>登录</title> </head> <body> <% page pageEncoding"UTF-8" %> <div style"text-ali…