当我为每个点运行代码时,我发现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") + '$';
}
}
}
}
答案 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
,格式化,显示ToolTips
或CustomLabels
等等。
要将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进行扩展讨论!