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\n最高分:#MAX\n最低分:#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


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com