Beispiel #1
0
        private void c1Chart1_MouseMove(object sender, MouseEventArgs e)
        {
            //handle dragging
            if (cbAllowDragging.Checked)
            {
                if (dragging)
                {
                    Point pt1 = c1Chart1.PointToScreen(move_pt);

                    if (!prev.IsEmpty)
                    {
                        ControlPaint.DrawReversibleLine(pt1, prev, c1Chart1.ChartArea.PlotArea.BackColor);
                    }

                    Point pt2 = c1Chart1.PointToScreen(new Point(e.X, e.Y));
                    ControlPaint.DrawReversibleLine(pt1, pt2, c1Chart1.ChartArea.PlotArea.BackColor);
                    prev = pt2;
                }
                else
                {
                    int si = -1, pi = -1, dist = -1;
                    if (c1Chart1.ChartGroups[0].CoordToDataIndex(e.X, e.Y,
                                                                 C1.Win.C1Chart.CoordinateFocusEnum.XandYCoord, ref si, ref pi, ref dist))
                    {
                        if (dist <= 6)
                        {
                            c1Chart1.Cursor = Cursors.Hand;
                        }
                        else
                        {
                            c1Chart1.Cursor = Cursors.Default;
                        }
                    }
                    else
                    {
                        c1Chart1.Cursor = Cursors.Default;
                    }
                }
            }

            //handle trend cursor
            Point mpt = new Point(e.X, e.Y);

            PlotArea pa = c1Chart1.ChartArea.PlotArea;

            Rectangle rect = new Rectangle(pa.Location, pa.Size);

            if (rect.Contains(mpt) && this.cbTLCursor.Checked)
            {
                ChartGroup cg = c1Chart1.ChartGroups[0];
                if (cg.ChartData.TrendsList.Count > 0)
                {
                    TrendLine tl = cg.ChartData.TrendsList[0];

                    double x = 0, y = 0;
                    int    ix = 0, iy = 0;

                    if (tl.RegressionStatistics != null)
                    {
                        if (cg.CoordToDataCoord(mpt.X, mpt.Y, ref x, ref y))
                        {
                            y = tl.GetY(x);

                            if (cg.DataCoordToCoord(x, y, ref ix, ref iy) && rect.Contains(ix, iy))
                            {
                                Point tlp = new Point(ix, iy);

                                hasPoint = true;

                                Rectangle invRect = new Rectangle(tlp.X - 8, tlp.Y - 8, 16, 16);

                                if (!tlp0.IsEmpty)
                                {
                                    invRect = Rectangle.Union(invRect, new Rectangle(tlp0.X - 8, tlp0.Y - 8, 16, 16));
                                }

                                c1Chart1.Invalidate(invRect);

                                tlp0 = tlp;

                                return;
                            }
                        }
                    }
                }
            }
            hasPoint = false;
        }