c# 设置TeeChart控件的提示文本

  使用第三方Steema的TeeChart控件,设置鼠标放在某一线条点上,显示某一点的数据标签问题(虚线型十字光标基准线,放在线上显示对应点的二维坐标轴数据数据),调用InitTeeChartTipTools方法即可:

/// <summary>
/// TeeChart线条的指示工具
/// </summary>
Steema.TeeChart.Tools.CursorTool cursorTool;
/// <summary>
/// 鼠标指示显示的文本
/// </summary>
private Steema.TeeChart.Tools.Annotation annotation;
/// <summary>
/// 初始化线条的提示工具信息
/// </summary>
private void InitTeeChartTipTools(Steema.TeeChart.TChart tChart)
{
  //以线形式对标坐标轴
  cursorTool = new Steema.TeeChart.Tools.CursorTool(tChart.Chart);
  cursorTool.Style = Steema.TeeChart.Tools.CursorToolStyles.Both;
  cursorTool.Pen.Style = System.Drawing.Drawing2D.DashStyle.Dash;
  cursorTool.Pen.Color = Color.Black;
  cursorTool.FollowMouse = true;
  cursorTool.Change += CursorTool_Change;
  //设置提示文本的信息
  annotation = new Steema.TeeChart.Tools.Annotation(tChart.Chart);
  annotation.Shape.Font.Name = "Arial";
  annotation.Shape.Font.Size = 12;
  annotation.Shape.Pen.Visible = true;
  annotation.Shape.Shadow.Visible = false;
  annotation.Shape.ShapeStyle = Steema.TeeChart.Drawing.TextShapeStyle.Rectangle;
  annotation.Position = Steema.TeeChart.Tools.AnnotationPositions.LeftBottom;
  annotation.TextAlign = StringAlignment.Center;

  for (int i = 0; i < tChart.Series.Count; i++)
  {
    tChart.Series[i].MouseEnter += Line_MouseEnter;
    tChart.Series[i].MouseLeave += Line_MouseLeave;
  }

  tChart.MouseLeave += TChart_MouseLeave;
  tChart.MouseEnter += TChart_MouseEnter;
}

/// <summary>
/// 鼠标进入TeeChart的事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void TChart_MouseEnter(object sender, EventArgs e)
{
  cursorTool.Chart=tChartCurve.Chart;
}

/// <summary>
/// 鼠标离开TeeChart的事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void TChart_MouseLeave(object sender, EventArgs e)
{
  cursorTool.Chart = null;
}

/// <summary>
/// 当鼠标进入线条时,将TeeChart的cursorTool工具指示的线条设置为对应的线条
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Line_MouseEnter(object sender, EventArgs e)
{
  cursorTool.Series = sender as Steema.TeeChart.Styles.Series;
}

/// <summary>
/// 当鼠标离开线条时,将TeeChart的cursorTool工具指示的线条设置为null
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Line_MouseLeave(object sender, EventArgs e)
{
  cursorTool.Series = null;
}
/// <summary>
/// 鼠标指示工具改变事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void CursorTool_Change(object sender, Steema.TeeChart.Tools.CursorChangeEventArgs e)
{
  try
  {
    Steema.TeeChart.Tools.CursorTool cursor = sender as Steema.TeeChart.Tools.CursorTool;
    if (cursor != null && cursor.Series != null)
    {
      annotation.Text = string.Format("({0},{1})", cursor.XValue.ToString("f1"), cursor.YValue.ToString("f1"));
      annotation.Top = cursor.Series.GetVertAxis.CalcYPosValue(InterpolateLineSeries(cursor.Series, cursor.XValue));
      annotation.Left = tChartCurve.Axes.Bottom.CalcXPosValue(cursor.XValue);
      annotation.Top -= 20;//将文本放在鼠标上方
      SizeF size = this.CreateGraphics().MeasureString(annotation.Text,
        new Font(annotation.Shape.Font.Name, annotation.Shape.Font.Size));
      if (annotation.Left + size.Width + 12 >= annotation.Chart.Width)
      {
        annotation.Left -= (int)size.Width + 12;//防止文本标签超出右边界而看不全
      }
    }
    else
    {
      //将其设置到控件外部
      annotation.Text = "";
      annotation.Top = annotation.Chart.Height + 5;
      annotation.Left = annotation.Chart.Width + 5;
    }
  }
  catch (Exception ex)
  {
    annotation.Text = ex.Message;
    annotation.Top = 5;
    annotation.Left = 5;
  }
}
/// <summary>
/// 计算某一点的Y值坐标
/// </summary>
/// <param name="series">曲线</param>
/// <param name="xvalue">对应的X轴的值</param>
/// <returns>计算得到的对应的Y轴的值</returns>
private double InterpolateLineSeries(Steema.TeeChart.Styles.Series series, double xvalue)
{
  try
  {
    int index;
    for (index = series.FirstVisibleIndex; index <= series.LastVisibleIndex; index++)
    {
      if (index == -1 || series.XValues.Value[index] > xvalue) break;
    }
    // safeguard
    if (index < 1)
    {
      index = 1;
    }
    else if (index >= series.Count)
    {
      index = series.Count - 1;
    }
    // y=(y2-y1)/(x2-x1)*(x-x1)+y1
    double dx = series.XValues[index] - series.XValues[index - 1];
    double dy = series.YValues[index] - series.YValues[index - 1];
    if (dx != 0.0)
    {
      return dy * (xvalue - series.XValues[index - 1]) / dx + series.YValues[index - 1];
    }
    else
    {
      return 0.0;
    }
  }
  catch (Exception ex)
  {
    Console.WriteLine(ex.Message);
    return 0.0;
  }
}

以上就是c# 设置TeeChart控件的提示文本的详细内容,更多关于c# 设置提示文本的资料请关注我们其它相关文章!

(0)

相关推荐

  • C#中TextBox实现输入提示功能的方法

    本文实例讲述了C#中TextBox实现输入提示功能的方法.分享给大家供大家参考.具体如下: 设置TextBox的AutoCompleteSource的属性为CustomSource,设置TextBox的AutoCompleteMode属性为SuggestAppend. using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawin

  • 解决C#调用dll提示

    程序在32位操作系统上运行正常,在64位操作系统上运行读卡功能提示"试图加载格式不正确". ---------------------------------------------------------------------------- 点击项目属性,把目标平台Any CPU 设置为X86 以上这篇解决C#调用dll提示"试图加载格式不正确的程序"问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们. 您可能感兴趣的文章: C#中

  • c#消息提示框messagebox的详解及使用

    C#消息提示框messagebox的详解及使用 消息对话框是用messagebox对象的show方法显示的.MessageBox对象是命名空间System.Windows.Forms的一部分,Show是一个静态方法,意思是说,不需要基于MessageBox类的对象创建实例,就可以使用该方法.而且该方法是可以重载的,即方法可以有不同的参数列表形式. 返回结果:DialogResult dr1=MessageBox.Show(text,caption,buttons,icon,defaultbutt

  • C#实现状态栏提示信息功能的示例

    本功能是在winform平台上实现的,其他平台大同小异,不多做介绍. 1.首先创建一个测试用winform窗体 2.在winform窗体上添加一个notifyIcon控件 然后设置notifyIcon属性,可自行修改其name属性,本文中name属性为notifyIcon1,注意此时点击查看ContextMenuStrip属性时显示的是无,所以我们还需要添加一个ContextMenuStrip控件 此时再去查看notifyIcon1中的ContextMenuStrip的属性时发现里面会有新添加的

  • c# 关闭窗体时提示的小例子

    复制代码 代码如下: private void WorkflowConfigure_FormClosing(object sender, FormClosingEventArgs e)        { DialogResult result = MessageBox.Show("此操作会丢弃您的当前设置,确定要继续?", "退出", MessageBoxButtons.YesNo, MessageBoxIcon.Question); if (DialogResul

  • C#程序提示“正由另一进程使用,因此该进程无法访问该文件”的解决办法

    问题描述: 图片加载后显示,然后进行删除操作时提示"--正由另一进程使用,因此该进程无法访问该文件.--" 解决办法: 原代码: 复制代码 代码如下: iml.Images.Add(Image.FromFile(potopath + "\\" + fi.Name)); 改为: 复制代码 代码如下: Image img = Image.FromFile(potopath + "\\" + fi.Name);  iml.Images.Add(img)

  • C#提示:“在证书存储区中找不到清单签名证书”的解决方法

    本文实例讲述了C#提示:"在证书存储区中找不到清单签名证书"的解决方法.分享给大家供大家参考.具体分析如下: 一.问题: 程序重新生成,提示错误:在证书存储区中找不到清单签名证书. 二.解决方法: 可能是之前部署的程序证书被我删掉了或是证书过期了,结果出现这个问题.解决方案如下: 方案1:右击项目属性->签名->为ClickOnce清单签名,将勾掉的选项去掉. 方案2:在签名中创建一个新的签名. 方案3:记事本打开相应的csproj文件,调整节点值.<SignMani

  • C#浏览器提示跨域问题解决方案

    一,我们使用两个域名互相访问的时候会提示跨域,原因在哪里呢?如下图跨域,我们探究下 是什么原因导致浏览器报这个错呢? 二,我们研究下看看请求是否成功.,如下图,浏览器返回的是200,证明请求是成功了,同时返回是成功了,那为什么还提示跨域呢? 三,经过看浏览器跨域的提示可知道"No 'Access-Control-Allow-Origin' header is present on the requested resource",我们是返回的head缺少了允许的域名,这个是浏览器自己的检

  • C# winForm实现的气泡提示窗口功能示例

    本文实例讲述了C# winForm实现的气泡提示窗口功能.分享给大家供大家参考,具体如下: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace WindowsFormsApplication60 { p

  • C#实现倒计时关闭提示框功能

    前两天实现某个功能需要做一个提示框 并且能够自动关闭的,就从网上搜了一个能够自动关闭的提示框 ,但由于我需要的场景是不确定计时时间的,所以并没有使用到该窗体,但是我觉得可以留存备用 ,后边也把我这种倒计时的提示框用处还是很多的,用于自动弹窗 自动关闭 ,虽然在我的项目中没有 其核心方法在 timer(TimerCallBack,Object,int32,int32) TimerCallBack 是一个委托 ,代表要执行的方法,其用途可以用在各个定时去调用方法的场景,而且可以设置窗体的FormBo

  • C#实现简单的loading提示控件实例代码

    自己画一个转圈圈的控件 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Drawing.Drawing2D; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows

随机推荐