目录
控制显示数据个数
设置为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);
}
修改背景色
效果:
首先设置背景色
控件右击打开属性
将√去掉
边框颜色选择: