zoukankan      html  css  js  c++  java
  • C# WinForm开发系列之chart控件画折线图和柱形图并自定义鼠标移动到数据标记点显示提示信息

    原文出自http://blog.csdn.net/dannyiscoder/article/details/70768230


    1.首先拖动chart控件到窗体,设置chart1的属性Legends中默认的Legend1的Enable为false;


    2.设置Series的ChartType为Line


    3.后台绑定数据

     List<string> xData = new List<string>() { "A", "B", "C", "D" };
     List<int> yData = new List<int>() { 10, 20, 30, 40 };
     chart1.Series[0]["PieLabelStyle"] = "Outside";//将文字移到外侧
     chart1.Series[0]["PieLineColor"] = "Black";//绘制黑色的连线。
     chart1.Series[0].Points.DataBindXY(xData, yData);


    4.chant控件自带的信息提示为ToolTip(映射区),如图1所示:


    图1


    5.在窗体加载中可通过如下代码定义需要显示的提示信息,代码如下:

     private void Form3_Load(object sender, EventArgs e)
     {
                List<string> xData = new List<string>() { "1", "2", "3", "4" };
                List<int> yData = new List<int>() { 10, 20, 30, 40 };
                //线条颜色
                chart1.Series[0].Color = Color.Green;
                //线条粗细
                chart1.Series[0].BorderWidth = 2;
                //标记点边框颜色      
                chart1.Series[0].MarkerBorderColor = Color.Blue;
                //标记点边框大小
                chart1.Series[0].MarkerBorderWidth = 3; //chart1.;// Xaxis 
                //标记点中心颜色
                chart1.Series[0].MarkerColor = Color.White;//AxisColor
                //标记点大小
                chart1.Series[0].MarkerSize = 8;
                //标记点类型     
                chart1.Series[0].MarkerStyle = MarkerStyle.Circle;   


        //需要提示的信息    
                chart1.Series[0].ToolTip = "当前年份:#VAL 最高分:#MAX 最低分:#Min";


                //将文字移到外侧
                chart1.Series[0]["PieLabelStyle"] = "Outside";
                //绘制黑色的连线
                chart1.Series[0]["PieLineColor"] = "Black";
                chart1.Series[0].Points.DataBindXY(xData, yData);
     }


    6.效果如下图2,3所示:


    图2


    图3

    注:为了自定义提示信息的样式,我自己定义了一个提示框,通过如下方法进行显示

    7.在form窗体上画提示框,(使用两个panel合并三个label),效果如图4所示:


    图4

    8.使用chart控件的工具提示事件,如图5所示:


    图5

    9.(1)初始窗体方法中隐藏自定义提示信息,代码如下:

    public Form3()
    {
          InitializeComponent();
          this.panel1.Visible = false;
    }

    (2)在窗体加载方法里绑定鼠标悬停工具提示事件,代码如下:

     private void Form3_Load(object sender, EventArgs e)
    {
           //悬停工具提示事件
           chart1.GetToolTipText += new EventHandler<ToolTipEventArgs>(chart1_GetToolTipText);

           List<string> xData = new List<string>() { "1", "2", "3", "4" };
           List<int> yData = new List<int>() { 10, 20, 30, 40 };
           //线条颜色
           chart1.Series[0].Color = Color.Green;
           //线条粗细
           chart1.Series[0].BorderWidth = 2;
           //标记点边框颜色      
           chart1.Series[0].MarkerBorderColor = Color.Blue;
           //标记点边框大小
           chart1.Series[0].MarkerBorderWidth = 3; //chart1.;// Xaxis 
           //标记点中心颜色
           chart1.Series[0].MarkerColor = Color.White;//AxisColor
           //标记点大小
           chart1.Series[0].MarkerSize = 8;
           //标记点类型     
           chart1.Series[0].MarkerStyle = MarkerStyle.Circle;//MarkerStyle.Circle;
           //将文字移到外侧
           chart1.Series[0]["PieLabelStyle"] = "Outside";
           //绘制黑色的连线
           chart1.Series[0]["PieLineColor"] = "Black";
           chart1.Series[0].Points.DataBindXY(xData, yData);
     }


    (3)悬停工具提示事件方法如下代码:

    //在具体事件处理函数中给出处理方法 
    /*用chart的mousemove时间,实时跟踪鼠标最近的X轴的位置,然后把cursorX设置到那个位置上,

    让用户知道我是选的那一个X的值,同时用tooltip显示该X轴上所有的Y值*/
    void chart1_GetToolTipText(object sender, ToolTipEventArgs e)
    {

          //判断鼠标是否移动到数据标记点,是则显示提示信息
          if (e.HitTestResult.ChartElementType == ChartElementType.DataPoint)
          {
               int i = e.HitTestResult.PointIndex;
               DataPoint dp = e.HitTestResult.Series.Points[i];
               //分别显示x轴和y轴的数值,其中{1:F3},表示显示的是float类型,精确到小数点后3位。                     
               string r = string.Format("次数:{0};数值:{1} ", dp.XValue, dp.YValues[0]);

               //鼠标相对于窗体左上角的坐标
                Point formPoint = this.PointToClient(Control.MousePosition);
                int x = formPoint.X;
                int y = formPoint.Y;
                //显示提示信息
        this.panel1.Visible = true;
                this.panel1.Location = new Point(x, y);
                this.label3.Text = r;
                }

        //鼠标离开数据标记点,则隐藏提示信息
                else {
                    this.panel1.Visible = false;
                }
     }

    7.当鼠标移动到不同数据标记点是的提示效果如图6,7所示:


    图6


    图7

  • 相关阅读:
    spring源码分析之cache注解
    Full Gc经历分析
    spring源码分析之context
    spring源码分析之freemarker整合
    publishing failed with multiple errors resource is out of sync with the file system--转
    真正解决问题:maven eclipse tomcat java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener--转
    pyspark kafka createDirectStream和createStream 区别
    kafka 0.11 spark 2.11 streaming例子
    蜜罐技术——通过布置一些作为诱饵的主机、网络服务或者信息,诱使攻击方对它们实施攻击,从而可以对攻击行为进行捕获和分析
    安装和使用访问暗网
  • 原文地址:https://www.cnblogs.com/owenzh/p/13329350.html
Copyright © 2011-2022 走看看