C# MsChart 类似十字光标/交叉线 跟随鼠标移动功能 的优化

用系统内置的光标,速度很慢,而且很卡,
所以要设计两条直线,不断的改变位置,来实现光标的效果

先设计两条折线。

 Series seriesX= chart1.Series["SeriesCursorX"];
            seriesX.ChartType = SeriesChartType.Line;
            seriesX.BorderWidth = 1;
            seriesX.Color = Color.FromArgb(90, 88, 151);
            seriesX.XValueType = ChartValueType.DateTime;


            Series seriesY = chart1.Series["SeriesCursorY"];
            seriesY.ChartType = SeriesChartType.Line;
            seriesY.BorderWidth = 1;
            seriesY.Color = Color.FromArgb(90,88,151);
            seriesY.XValueType = ChartValueType.DateTime;

然后在,鼠标经过事件中写代码

 private void chart1_MouseMove(object sender, MouseEventArgs e)
        {
            try
            {
                chart1.Series["SeriesCursorX"].Points.Clear();
                chart1.Series["SeriesCursorY"].Points.Clear();
                double cursorX = chart1.ChartAreas[0].AxisX.PixelPositionToValue(e.X);
                double cursorY = chart1.ChartAreas[0].AxisY.PixelPositionToValue(e.Y);
                chart1.Series["SeriesCursorX"].Points.AddXY(cursorX, chart1.ChartAreas[0].AxisY.Minimum);
                chart1.Series["SeriesCursorX"].Points.AddXY(cursorX, chart1.ChartAreas[0].AxisY.Maximum);

                chart1.Series["SeriesCursorY"].Points.AddXY(chart1.ChartAreas[0].AxisX.Minimum, cursorY);
                chart1.Series["SeriesCursorY"].Points.AddXY(chart1.ChartAreas[0].AxisX.Maximum, cursorY);

                DateTime dateTime = DateTime.FromOADate(cursorX);

                labeltooltip.Text = "日期\r\n" + dateTime.ToString("yyyy-MM-dd") +
                     "\r\n时间\r\n" + dateTime.ToString("HH:mm:ss") +
                "\r\n报价\r\n" + cursorY.ToString("f2");
            }
            catch
            {
            }

        }

效果如图
C# MsChart 类似十字光标/交叉线 跟随鼠标移动功能 的优化_第1张图片

你可能感兴趣的:(k线图)