c#tchart的使用

tech2026-09-02  0

目录

控制显示数据个数x轴设置为指定时间格式,且设置最小间隔时间鼠标滚轮控制缩放点击数据点显示曲线信息调出图片导出保存界面绑定数据源并生成曲线实现数据点鼠标拖拽实现上下线拖动控制

控制显示数据个数

设置为0则是全显示,>0则是显示实际设置个数,若添加了40个数据,但只设置显示10个,则可以鼠标右键拖拽显示之后的数据。

x轴设置为指定时间格式,且设置最小间隔时间

鼠标滚轮控制缩放

添加滚轮事件

tChart1.MouseWheel += TChart1_MouseWheel; private void TChart1_MouseWheel(object sender, MouseEventArgs e) { if (tChart1 != null) { var valueUnit = e.Delta > 0 ? 1 : -1; var valueUnit2 = e.Delta > 0 ? 1.5 : 0.5; double OldXMin = tChart1.Axes.Bottom.Minimum; double OldXMax = tChart1.Axes.Bottom.Maximum; double XMid = (OldXMin + OldXMax) / 2; double NewXMin = (valueUnit * XMid * 0.5 + OldXMin) / (valueUnit2); double NewXMax = (valueUnit * XMid * 0.5 + OldXMax) / (valueUnit2); tChart1.Axes.Bottom.SetMinMax(NewXMin, NewXMax);//x轴缩放 double OldYMin = tChart1.Axes.Left.Minimum; double OldYMax = tChart1.Axes.Left.Maximum; double YMid = (OldYMin + OldYMax) / 2; double NewYMin = (valueUnit * YMid * 0.2 + OldYMin) / (valueUnit2); double NewYMax = (valueUnit * YMid * 0.2 + OldYMax) / (valueUnit2); tChart1.Axes.Left.SetMinMax(NewYMin, NewYMax);//y轴缩放 } }

点击数据点显示曲线信息

添加点击事件

tChart1.ClickSeries += new Steema.TeeChart.TChart.SeriesEventHandler(this.tChart1_ClickSeries); private void tChart1_ClickSeries(object sender, Steema.TeeChart.Styles.Series s, int valueIndex, MouseEventArgs e) { var mes = "时间:" + DateTime.FromOADate(s.XValues[valueIndex]) + "\r\n值:" + s.YValues[valueIndex] + _chartValueUnit + "\r\n曲线:" + s.Title; Form form = FindForm(); label1.Text = mes; toolTip1.Show(mes, form, form.PointToClient(Cursor.Position)); }

调出图片导出保存界面

tChart1.Export.ShowExportDialog();

绑定数据源并生成曲线

Line line = new Line(); line.Pointer.HorizSize = 2; line.Pointer.Style = PointerStyles.Circle; line.Pointer.VertSize = 2; line.Pointer.Visible = true; line.XValues.DateTime = true; line.Title = name; line.DataSource = table; line.XValues.DataMember = _xAxexTableName;//x轴的数据取值,写table用于x轴的列名 line.YValues.DataMember = _yAxexTableName;//y轴的数据取值,写table用于y轴的列名 tChart1.Series.Add(line);

实现数据点鼠标拖拽

有时候工程需要对曲线进行修改,则可以点击数据点,进行拖拽,属性设置如下: 因为该工具激活会导致无法进入ClickSeries事件,而我需要在ClickSeries事件中找到点击的数据点并显示对应信息,所以点击数据点后检测是单击还是拖拽,是单击则激活dragPoint工具,鼠标变成手型,可拖拽数据点,检测是拖拽后,则恢复箭头鼠标,可用于点击。鼠标右键可在手型时恢复箭头点击状态,避免选择了错误的数据点需要拖拽才能恢复。 主要代码如下:

bool isSeriesClicked = false; private void tChart1_ClickSeries(object sender, Steema.TeeChart.Styles.Series s, int valueIndex, MouseEventArgs e) { curResultPointIndex = valueIndex;//点击的数据点索引 ChangeResultPoint(curResultPointIndex);//处理显示 isSeriesClicked = true; } DateTime mouseDownTime; private void tChart1_MouseDown(object sender, MouseEventArgs e) { mouseDownTime = DateTime.Now; } private void tChart1_MouseUp(object sender, MouseEventArgs e) { var time= (DateTime.Now - mouseDownTime).TotalSeconds; if (time > 0.3 )//判断为拖拽 { dragPoint1.Active = false; tChart1.Cursor = Cursors.Default; if (ResultPoint!=null && ResultPoint.Count > curResultPointIndex) { var point = ResultPoint[curResultPointIndex]; point.OldVaule = point.CurVaule; point.CurVaule = line2.YValues[curResultPointIndex] ; ChangeResultPoint(curResultPointIndex); } } else//判断为点击 { if (isSeriesClicked) { dragPoint1.Active = true;//激活控件 isSeriesClicked = false; UpdataMidResultMenu(ResultPoint);//处理函数 } } } private void tChart1_MouseClick(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Right) { dragPoint1.Active = false; tChart1.Cursor = Cursors.Default; } }

实现上下线拖动控制

效果如下,可鼠标拖动红色线:

属性设置:

实现上下线获取平均值

private void ColorLine1_EndDragLine(object sender) { if (ResultPoint == null || curResultPointIndex >= ResultPoint.Count || ResultPoint[curResultPointIndex].MidValues == null) return; var maxValue = colorLine1.Value > colorLine2.Value? colorLine1.Value: colorLine2.Value;//获取两条线最大值 var minValue = colorLine1.Value > colorLine2.Value?colorLine2.Value: colorLine1.Value;//获取两条线最小值 var allMidPoints = ResultPoint[curResultPointIndex].MidValues; List<double> points = new List<double>(); //获取两条线中间的所有数据 for (int i = 0; i < allMidPoints.Count; i++) { if (allMidPoints[i] >= minValue && allMidPoints[i] <= maxValue) points.Add(allMidPoints[i]); } var arg = points.Count <= 0?0: points.Average(); UpdateChartLable(points.Count, arg); }
最新回复(0)