2016-08-17 91 views
1

当数据点值相对于图表中的最大值较小时,点击图表列并不容易,因为可点击区域非常小。所以,我想找到一种方法让整列可点击,包括显示数据点上方和下方的空白区域。如何使整个StackedColumn可点击,而不仅仅是数据点

我一直在寻找这样做,带状线与列对齐,因为带状线被HitTest检测到,但我很难理解是否/如何进行对齐。

这是一个可行的想法还是有一些其他方式来实现我的目标?

屏幕截图显示了问题。 2025年的数据用BackHatching高亮显示。

Screenshot shows the problem. The data in 2025 is highlighted with BackHatching.

+0

你能与你的技术,这个标签使用 – FloatingKiwi

+0

是的。我应该做到这一点。它是在Win 8.1笔记本电脑上用Visual Studio Community 2015开发的C#WinForms应用程序。 –

回答

1

这应有助于:

private void chart1_MouseClick(object sender, MouseEventArgs e) 
{ 
    Axis ay = chart1.ChartAreas[0].AxisY; 
    int zeroPix = (int)ay.ValueToPixelPosition(0); 
    HitTestResult hittr = chart1.HitTest(e.X, zeroPix); 

    // now you can do your stuff..  
    Text = hittr.ChartElementType.ToString(); 
} 

诀窍是测试不实际的垂直鼠标的位置,但其中zero数据值位于像素。由于(正确填充)StackedColumn图表在这个位置应该有一个DataPoint所有列,我们可以在那里做HitTest

相同的技巧也应该柱形图工作:这里太每列将上升或下降到它的y值,但始终为0

的想法开始使用StripLines是耐人寻味的,顺便说一句,但我想不出找到合适的宽度和位置的方法。

另一种方法是扫描的全部点中的所有系列,以找到那些我们最接近,然后用他们的价值观,但是这听起来甚至更贵的..

+1

辉煌。谢谢。对于其他读者来说,你可以通过舍入hittr.Axis.PixelPositionToValue(e.X)得到被单击的X轴值(在我的情况下为Year)。请注意,您可能需要测试自第1列前面的单击之后或之后最后一个X轴值超出绘制范围的X轴值,它们将返回未绘制的X轴值。 –

+0

我刚刚发现,由于某种原因,因为hittr.Axis值为空,所以当出现负值时,我的建议是不能获取X轴值。所以,请用上面四舍五入的chart1.ChartAreas [0] .AxisX.PixelPositionToValue(e.X)代替我上面的语句。 –

相关问题