如何在.Net WinForms图表控件中检索所选范围?

我正在使用C#内置Winforms Chart控件( System.Windows.Forms.DataVisualization.Charting.Chart ),其内置function是让用户选择一个范围。 我想做的是回读用户选择的范围。 当然必须有一些简单的方法来做到这一点,但我一直无法找到它。

光标启用如下:

var ca = chart1.ChartAreas["ChartArea1"].CursorX; ca.CursorX.IsUserEnabled = true; ca.CursorX.IsUserSelectionEnabled = true; 

我知道当用户通过启用ca.AxisX.ScaleView.Zoomable选择范围时,我可以使图表变焦,但我不希望图片改变:相反,我使用图表作为显示信息的方式和让用户选择一系列X值,然后我做一些额外的处理。

我尝试连接到chart1.SelectionRangeChanged,并且每次更改范围时确实会触发 – 我似乎无法从CursorEventArg中获取选择范围。 它有“ NewSelectionStart ”和“ NewSelectionEnd ”字段,但那些是NaN ,令人失望。 我试着查看图表和轴的各种属性,但没有找到任何听起来很有希望的东西。

进一步的调查揭示了ChartArea.CursorX.SelectionStart属性,这听起来正是我需要的……除了它也是NaN。 我不知道这是正常还是我遇到某种错误?

那么,我怎样才能确定用户选择的范围?

好吧,好吧,我明白了。 这是独家新闻:

有一个SelectionRangeChang * ing *事件,当该事件运行时, ChartArea.CursorX.SelectionStartChartArea.CursorX.SelectionEnd字段中包含正确的值。 但是用户还没有释放鼠标按钮,所以你应该只存储它们。

当用户释放鼠标按钮时,将触发SelectionRangeChang * ed *事件。 不知何故,它的设计方式使SelectionStart和SelectionEnd重置为NaN(就像事件参数中的NewSelectionStartNewSelectionEnd字段一样)。 您现在需要做的是使用您从其他事件处理程序中获取的值,因为您知道使用它们的时间是正确的。

所以你有它! 希望这个答案能够让其他人免于浪费时间。