这就是我的图表现在的样子:
我有这些问题:
AxisX
为DateTime
,格式为Diagramm.ChartAreas[0].AxisX.LabelStyle.Format = "dd.MM.yy HH";
。这是有效的,但正如您所看到的那样,标签被切断的时间是多少小时。如何为X轴的每个标签设置鼠标悬停工具提示?
series1位于辅助AxisY2:Diagramm.Series["S1"].YAxisType = AxisType.Secondary;
。我使用Diagramm.ChartAreas[0].AxisY2.LabelStyle.Format = "C0";
据我所知,给定值1088,55应该四舍五入到1089欧元但是你可以看到它转换为108855欧元。但为什么?该值已经作为双倍...
第2点的更新:感谢TaW,将,
转换为.
,这有效
我的系列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;
}
}
我希望将AxisX
的小时格式化为"dd.MM.yy HH"
。如何访问小时而不是dp.AxisLabel.ToString()
这是错误的?
第3点的更新:感谢TaW,DateTime.FromOADate(Convert.ToDouble(dp.XValue.ToString())).Hour
正在运作
由于
答案 0 :(得分:1)
由于第2和第3部分是从评论中解决出来的,我们留下了大文章:我们如何获得轴标签的工具提示。
似乎没有预定义的轴标签。 Axis
本身支持ToolTip
,但不接受#VALX
之类的Keywords等。
因此,当我们点击Label
时,我们需要设置其提示值。以下是我们如何做到这一点:
我们对MouseMove
事件进行编码,以测试是否点击了Label
。然后我们使用我们在那里找到的数据来创建ToolTip
字符串。
它开始很简单:
HittTest
AxisLabels
CustomLabel
这很有趣:我们使用简单的,自动创建的AxisLabels
,但HitTest
返回的是CustomLabels
!!
其中一个后果是我们没有Value
,而是ToPosition
和FromPosition
值。由于标签是自动创建的,我们可以期望它们对称排列;所以为了获得Value
,我们可以简单地拿中间..
由于您的x轴像往常一样DateTime
转换为double
,我们现在可以转换回DateTime
并使用您用于{{1}的相同格式字符串格式化提示}}。如果你愿意,你当然可以选择另一种格式..
LabelStyle
这样做的一个问题是你需要更好地击中轴,否则工具提示不会被触发。
您可以使用自己的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
事件中创建工具提示字符串,并且必须确保提示顺利进行..