簡體   English   中英

如何使用鼠標滾輪縮放Windows表單圖表?

[英]How can I scale my Windows forms chart using the mouse wheel?

我正在使用Windows窗體圖表控件,這是滾輪鼠標事件:

void chart1_MouseWheel(object sender, MouseEventArgs e)
        {
            if (e.Delta < 0)
            {
                chart1.ChartAreas[0].AxisX.ScaleView.ZoomReset();
                chart1.ChartAreas[0].AxisY.ScaleView.ZoomReset();
            }

            if (e.Delta > 0)
            {
                double xMin = chart1.ChartAreas[0].AxisX.ScaleView.ViewMinimum;
                double xMax = chart1.ChartAreas[0].AxisX.ScaleView.ViewMaximum;
                double yMin = chart1.ChartAreas[0].AxisY.ScaleView.ViewMinimum;
                double yMax = chart1.ChartAreas[0].AxisY.ScaleView.ViewMaximum;

                double posXStart = chart1.ChartAreas[0].AxisX.PixelPositionToValue(e.Location.X) - (xMax - xMin) / 4;
                double posXFinish = chart1.ChartAreas[0].AxisX.PixelPositionToValue(e.Location.X) + (xMax - xMin) / 4;
                double posYStart = chart1.ChartAreas[0].AxisY.PixelPositionToValue(e.Location.Y) - (yMax - yMin) / 4;
                double posYFinish = chart1.ChartAreas[0].AxisY.PixelPositionToValue(e.Location.Y) + (yMax - yMin) / 4;

                chart1.ChartAreas[0].AxisX.ScaleView.Zoom(posXStart, posXFinish);
                chart1.ChartAreas[0].AxisY.ScaleView.Zoom(posYStart, posYFinish);
            }
        }

問題出在圖表繪制事件中,當我繪制點並將其與線連接時,使用輪子時,點和線都消失了,我認為它們的縮放比例不正確。

Pen pen = new Pen(Color.Blue, 2.5f);
        SolidBrush myBrush = new SolidBrush(Color.Red);
        private void chart1_Paint(object sender, PaintEventArgs e)
        {

            if (paintToCalaculate)
            {
                Series s = chart1.Series.FindByName("dummy");
                if (s == null) s = chart1.Series.Add("dummy");
                drawPoints.Clear();
                s.Points.Clear();
                foreach (PointF p in valuePoints)
                {
                    s.Points.AddXY(p.X, p.Y);
                    DataPoint pt = s.Points[0];
                    double x = chart1.ChartAreas[0].AxisX.ValueToPixelPosition(pt.XValue);
                    double y = chart1.ChartAreas[0].AxisY.ValueToPixelPosition(pt.YValues[0]);
                    drawPoints.Add(new Point((int)x, (int)y));
                    s.Points.Clear();
                }
                paintToCalaculate = false;
                chart1.Series.Remove(s);
            }
            foreach (Point p in drawPoints)
            {
                e.Graphics.FillEllipse(Brushes.Red, p.X - 2, p.Y - 2, 4, 4);
            }
            if (drawPoints.Count > 1)
            {
                e.Graphics.DrawLines(pen, drawPoints.ToArray());
            }
                    }

如何在滾輪鼠標事件中同時照顧我在繪畫事件中繪制的點和線?

我認為您可能需要在縮放時設置“ paintToCalaculate”標志。 在第一個繪畫事件期間它將關閉,並且在縮放時不會重新打開,因此不會重新縮放線條。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM