Windows 形成图表:获取图表轴刻度中的鼠标光标坐标?
Windows Forms Chart: Get mouse cursor coordinates in Chart axis scale?
我对以下示例有疑问:
当我点击屏幕截图中标记为 '1' 的位置时,我可以通过 MouseClick 事件以非常简单的方式获取以像素为单位的位置:
private: System::Void chart1_MouseClick(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e) {
Point chartLocationOnForm = chart1->FindForm()->PointToClient(chart1->Parent->PointToScreen(chart1->Location));
cursorPosX = e->X - chartLocationOnForm.X;
cursorPosY = e->Y - chartLocationOnForm.Y;
}
打印出这些值后,我得到了以像素为单位的位置,其中标记为 '2' 的位置等于 (0,0)。
点击'1'中的点我想得到的是
X: 40
Y: 178.5,
这是我图表中的坐标。有什么文明方法可以做到这一点(我的意思是除了考虑图表的填充、边距和边框并自己计算这些坐标之外)?
我的一个想法是创建某种不可见的 CursorX 和 CursorY 并使用它的方法,但它似乎仍然更像是一种解决简单问题的奇特方法,而不是一个真正的、直接的解决方案。我是对的还是真的是我解决问题的方法?
是的,如果我正确理解你的问题,有一种文明的方式可以做到这一点。您可以使用 Axis.PixelPositionToValue 方法来做到这一点。
例如(在 C# 中)
chart.ChartAreas[0].AxisX.PixelPositionToValue(pt.X)
chart.ChartAreas[0].AxisY.PixelPositionToValue(pt.Y)
我对以下示例有疑问:
当我点击屏幕截图中标记为 '1' 的位置时,我可以通过 MouseClick 事件以非常简单的方式获取以像素为单位的位置:
private: System::Void chart1_MouseClick(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e) {
Point chartLocationOnForm = chart1->FindForm()->PointToClient(chart1->Parent->PointToScreen(chart1->Location));
cursorPosX = e->X - chartLocationOnForm.X;
cursorPosY = e->Y - chartLocationOnForm.Y;
}
打印出这些值后,我得到了以像素为单位的位置,其中标记为 '2' 的位置等于 (0,0)。
点击'1'中的点我想得到的是
X: 40
Y: 178.5,
这是我图表中的坐标。有什么文明方法可以做到这一点(我的意思是除了考虑图表的填充、边距和边框并自己计算这些坐标之外)?
我的一个想法是创建某种不可见的 CursorX 和 CursorY 并使用它的方法,但它似乎仍然更像是一种解决简单问题的奇特方法,而不是一个真正的、直接的解决方案。我是对的还是真的是我解决问题的方法?
是的,如果我正确理解你的问题,有一种文明的方式可以做到这一点。您可以使用 Axis.PixelPositionToValue 方法来做到这一点。
例如(在 C# 中)
chart.ChartAreas[0].AxisX.PixelPositionToValue(pt.X)
chart.ChartAreas[0].AxisY.PixelPositionToValue(pt.Y)