Tango Posted November 14, 2011 Report Posted November 14, 2011 Hi, I need a way to select intervals in a chart. To make it easier for the user I want to click the chart and drag the mouse to either direction. There should appear a box in the background showing the interval selected. More intervals can be created by repeating the procedure. I tried first painting on the graphics object returned from Chart.GetGraphics. But that did not work very well since I could only place code in the Post Paint operation and that one did not fire when I needed (yes maybe I could have set a property in the graph object to force the repaint). I believe the Chart uses a cash otherwise. The solution I'm working on now: using a CustomGridLine. If I set the position of this gridline and width I can make a "selection". Problem is it seems that width is not scaled at all when the form is resized. And there is some bias between MouseClick position and Drag position (this one is calculated the first drag). Anyone have any other ideas of how to do this? Some code snippets: void chart_DragOver(object sender, DragEventArgs e) { if (!bias.HasValue) bias = (e.X - _from.X); else { CustomGridLine line = (CustomGridLine)e.Data.GetData(typeof(CustomGridLine)); line.Width = Math.Abs(((e.X - _from.X) - bias.Value)); line.Value = chart.AxisX.PixelToValue(_from.X) + chart.AxisX.PixelToValue((e.X - _from.X) - bias.Value) / 2; } } private void chart_MouseDown(object sender, HitTestEventArgs e) { if (!chart.Zoom && e.Button == MouseButtons.Left) { try { if (ModifierKeys == Keys.Shift) { _from = new Point(e.X, e.Y); CustomGridLine gridLine = new CustomGridLine(chart.AxisX.PixelToValue(e.X), ""); gridLine.ExtraStyle = CustomGridLineStyles.BackOnly; chart.AxisX.CustomGridLines.Add(gridLine); chart.DoDragDrop(gridLine, DragDropEffects.Move); } catch { } } Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.