为什么我没有得到X轴的DateTime值

时间:2016-02-06 18:44:31

标签: c# visual-studio graph charts tooltip

当我为每个点运行代码时,我发现x值为0.0

我不知道如何解决它;我试图将其转换为像素,然后转换为值,但结果相同。该图表包含每个日期的价格。

 for (int i = 0; i < a.Count; i++)//making the anual graph
 {
                annual.Series["close"].Points.AddXY((DateTime.ParseExact(a[i].Date, "yyyyMMdd", null).ToString("yyyy/MM/dd")), a[i].close);
 }



 Point? prevPosition = null;
      private void annual_MouseMove(object sender, MouseEventArgs e)
     {
         {
             var pos = e.Location;
             if (prevPosition.HasValue && pos == prevPosition.Value)
                 return;
             toolTip1.RemoveAll();
             prevPosition = pos;
             var results = annual.HitTest(pos.X, pos.Y, false,
                                             ChartElementType.DataPoint);
             var results1 = candlestickchart.HitTest(pos.X, pos.Y, false,
                                             ChartElementType.DataPoint);
             foreach (var result in results)
             {
                 if (result.ChartElementType == ChartElementType.DataPoint)// check if it is a point on the graph
                 {         
                     var prop = result.Object as DataPoint;// look on the result as a point
                     if (prop != null)
                     {
                         var pointYPixel = result.ChartArea.AxisY.ValueToPixelPosition(prop.YValues[0]);

                         // check if the cursor is really close to the point (3 pixels around)
                         if (Math.Abs(pos.Y - pointYPixel) < 3)
                         {
                             toolTip1.Show("PRICE=" + prop.YValues[0].ToString("0.00")+'$', this.annual,pos.X, pos.Y - 15);
                             label3.Text = prop.XValue.ToString();<========
                             label4.Text = prop.YValues[0].ToString("0.00") + '$';                              
                         }
                         }
                     }
                 }

1 个答案:

答案 0 :(得分:0)

原因是这一行:

annual.Series["close"].Points.AddXY((DateTime.ParseExact(a[i].Date,
                      "yyyyMMdd", null).ToString("yyyy/MM/dd")), a[i].close);

ParseExact方法会返回DateTime,这样会很好,但之后再将其重新格式化为字符串!

X值始终包含双,来自数字或来自DateTime.ToOADate方法自动转换的DateTime值。如果将X值作为字符串添加,则它们都设置为零,因为这些字符串既不是数字也不是DataTimes

容易错过,因为自动Labels实际上设置为字符串,所以看起来都很好。

但是,只要您尝试执行任何与这些X值相似的计算,设置Interval,格式化,显示ToolTipsCustomLabels等等。

要将X值添加为DateTimes,请将行更改为

annual.Series["close"].Points.AddXY(DateTime.ParseExact(a[i].Date,
                      "yyyyMMdd", null), a[i].close);

并为Format设置Labels

yourChartArea.AxisX.LabelStyle.Format = "yyyy/MM/dd";

请参阅here进行扩展讨论!

所以:总是尝试将X值作为数字或日期添加,而不是作为字符串添加!