格式化图表DataPoints并显示标签工具提示

时间:2017-05-03 08:17:59

标签: c# winforms tooltip mschart

这就是我的图表现在的样子:

enter image description here

我有这些问题:

  1. AxisXDateTime,格式为Diagramm.ChartAreas[0].AxisX.LabelStyle.Format = "dd.MM.yy HH";。这是有效的,但正如您所看到的那样,标签被切断的时间是多少小时。如何为X轴的每个标签设置鼠标悬停工具提示?

  2. series1位于辅助AxisY2:Diagramm.Series["S1"].YAxisType = AxisType.Secondary;。我使用Diagramm.ChartAreas[0].AxisY2.LabelStyle.Format = "C0";

  3. 格式化了货币轴

    据我所知,给定值1088,55应该四舍五入到1089欧元但是你可以看到它转换为108855欧元。但为什么?该值已经作为双倍...

    第2点的更新:感谢TaW,将,转换为.,这有效

    1. 我的系列1的工具提示是使用:

      创建的

      foreach (DataPoint dp in Diagramm.Series["S1"].Points) { if (dp.YValues[0] > 0) { dp.ToolTip = dp.YValues[0].ToString("C0") + " Umsatz für Stunde " + dp.AxisLabel.ToString() + ""; } else { dp.IsValueShownAsLabel = false; } }

    2. 我希望将AxisX的小时格式化为"dd.MM.yy HH"。如何访问小时而不是dp.AxisLabel.ToString()这是错误的?

      第3点的更新:感谢TaW,DateTime.FromOADate(Convert.ToDouble(dp.XValue.ToString())).Hour正在运作

      由于

1 个答案:

答案 0 :(得分:1)

由于第2和第3部分是从评论中解决出来的,我们留下了大文章:我们如何获得轴标签的工具提示。

似乎没有预定义的轴标签。 Axis本身支持ToolTip,但不接受#VALX之类的Keywords等。

因此,当我们点击Label时,我们需要设置其提示值。以下是我们如何做到这一点:

我们对MouseMove事件进行编码,以测试是否点击了Label。然后我们使用我们在那里找到的数据来创建ToolTip字符串。

它开始很简单:

  • 我们执行HittTest
  • 我们检查了其中一个AxisLabels
  • 然后我们将对象转换为CustomLabel

这很有趣:我们使用简单的,自动创建的AxisLabels,但HitTest返回的是CustomLabels !!

其中一个后果是我们没有Value,而是ToPositionFromPosition值。由于标签是自动创建的,我们可以期望它们对称排列;所以为了获得Value,我们可以简单地拿中间..

由于您的x轴像往常一样DateTime转换为double,我们现在可以转换回DateTime并使用您用于{{1}的相同格式字符串格式化提示}}。如果你愿意,你当然可以选择另一种格式..

LabelStyle

这样做的一个问题是你需要更好地击中轴,否则工具提示不会被触发。

enter image description here

您可以使用自己的private void chart_MouseMove(object sender, MouseEventArgs e) { HitTestResult hit = chart.HitTest(e.X, e.Y, ChartElementType.AxisLabels); if (hit != null && hit.ChartElementType == ChartElementType.AxisLabels) { Axis ax = chart.ChartAreas[0].AxisX; var lab = hit.Object as CustomLabel; if (lab == null || lab.Axis != ax) return; double d = (lab.ToPosition + lab.FromPosition) / 2d; DateTime dt = DateTime.FromOADate(d); string tip = dt.ToString(ax.LabelStyle.Format); ax.ToolTip = tip; } } 来避免这种情况,但这超出了此问题的范围;它将涉及ToolTip Timer您在MouseMove开始/停止。你会在Tick事件中创建工具提示字符串,并且必须确保提示顺利进行..