private static void SetChartControlState(Chart sender, MSChartExtensionToolState state) { ChartTool[(Chart)sender].ToolState = state; sender.ChartAreas[0].CursorX.IsUserEnabled = false; sender.ChartAreas[0].CursorY.IsUserEnabled = false; switch (state) { case MSChartExtensionToolState.Select: sender.Cursor = Cursors.Cross; sender.ChartAreas[0].CursorX.IsUserEnabled = true; sender.ChartAreas[0].CursorY.IsUserEnabled = true; break; case MSChartExtensionToolState.Zoom: case MSChartExtensionToolState.ZoomX: sender.Cursor = Cursors.Cross; break; case MSChartExtensionToolState.Pan: sender.Cursor = Cursors.Hand; break; } }
/// <summary> /// SetToolState /// </summary> public static void SetToolState(this Chart sender, MSChartExtensionToolState state) { SetChartControlState(sender, state); }
private static void ChartControl_MouseUp(object sender, MouseEventArgs e) { if (e.Button != System.Windows.Forms.MouseButtons.Left) { return; } MouseDowned = false; Chart ptrChart = (Chart)sender; ChartArea ptrChartArea = ptrChart.ChartAreas[0]; ChartData data = GetDataForChart(ptrChart); MSChartExtensionToolState state = data.ToolState; switch (state) { case MSChartExtensionToolState.Zoom: case MSChartExtensionToolState.ZoomX: //Zoom area (Pixel) double XStart = ptrChartArea.CursorX.SelectionStart; double XEnd = ptrChartArea.CursorX.SelectionEnd; double YStart = ptrChartArea.CursorY.SelectionStart; double YEnd = ptrChartArea.CursorY.SelectionEnd; if ((XStart == XEnd) && (YStart == YEnd)) { return; } //Zoom area for X Axis double left = Math.Min(XStart, XEnd); double right = Math.Max(XStart, XEnd); double XMin = ptrChartArea.AxisX.ValueToPosition(left); double XMax = ptrChartArea.AxisX.ValueToPosition(right); //Zoom area for Y Axis double bottom = Math.Min(YStart, YEnd); double top = Math.Max(YStart, YEnd); double YMin = ptrChartArea.AxisY.ValueToPosition(bottom); double YMax = ptrChartArea.AxisY.ValueToPosition(top); // NOTE: left <= right, even if Axis.IsReversed //X-Axis ptrChartArea.AxisX.ScaleView.Zoom(left, right); ptrChartArea.AxisX2.ScaleView.Zoom( ptrChartArea.AxisX2.PositionToValue(XMin), ptrChartArea.AxisX2.PositionToValue(XMax)); //Y-Axis if (state == MSChartExtensionToolState.Zoom) { ptrChartArea.AxisY.ScaleView.Zoom(bottom, top); ptrChartArea.AxisY2.ScaleView.Zoom( ptrChartArea.AxisY2.PositionToValue(YMin), ptrChartArea.AxisY2.PositionToValue(YMax)); } //Clear selection (the following seem to be equivalent) ptrChartArea.CursorX.SetSelectionPosition(0, 0); ptrChartArea.CursorY.SetSelectionPosition(0, 0); //ptrChartArea.CursorX.SelectionStart = ptrChartArea.CursorX.SelectionEnd; //ptrChartArea.CursorY.SelectionStart = ptrChartArea.CursorY.SelectionEnd; //NOTE: At this point, the scaled view has already been updated to reflect zoom OnZoomChanged(ptrChart); break; case MSChartExtensionToolState.Pan: break; } }
private static void SetChartControlState(Chart sender, MSChartExtensionToolState state) { ChartTool[(Chart)sender].ToolState = state; UpdateChartControlState(sender); }