VC# + ZedGraph

Odpowiedz Nowy wątek
Czadus
2009-01-06 14:13
Czadus
0

hej. Chciałem na moim wykresie narysować dynamicznie wykres. Miałoby to działać na zasadzie takiej, że gdzieś na wykresie klikam, pojawia się okno ze współrzędnymi kliknięcia na wykresie (Ale na podstawie przedziałki), klikam dodaj, i mam punkt. Za pomocą kilku punktów rysowałbym już wykres. Problem w tym, że x oraz y całej kontrolki potrafię pobrać, ale jak to się ma do samego wykresu, czyli obiektu w tej kontrolce. jak to ma się do przedziałki, skali wykresu?? Może jest jakaś metoda, która sama na podstawie skali pobierze mi kliknięty punkt?? Proszę o rady. Pozdrawiam

Pozostało 580 znaków

zedgraph.org
2009-01-06 14:41
zedgraph.org
0

http://zedgraph.org/wiki/inde[...]_Points_by_Dragging_the_Mouse

w metodzie zg1_MouseMoveEvent jest chyba to o co Ci chodzi

Pozostało 580 znaków

Czadus
2009-01-06 18:57
Czadus
0

Napisałem coś takiego, ponieważ chciałem przetestować działanie funkcji:

private void zedGraphControl1_MouseClick(ZedGraphControl control, MouseEventArgs e)
        {
           GraphPane myPane = control.GraphPane;
           PointF mousePt = new PointF( e.X, e.Y );

           // see if a dragging operation is underway
           if ( isDragPoint )
           {
              // get the scale values that correspond to the current point
              double curX, curX2, curY, curY2;
              myPane.ReverseTransform(mousePt, out curX, out curX2, out curY, out curY2);
              // if it's a Y2 axis, use that value instead of Y
              if ( dragCurve.IsY2Axis )
                 curY = curY2;
              // calculate the new scale values for the point
              PointPair newPt = new PointPair( startPair.X + curX - startX, startPair.Y + curY - startY );
              // save the data back to the point list
              ( dragCurve.Points as PointPairList )[dragIndex] = newPt;
              // force a redraw
              control.Refresh();
              // tell the ZedGraphControl not to do anything else with this event
           }
           else
           {
              //change the cursor if the mouse is sufficiently close to a point
              if ( myPane.FindNearestPoint( mousePt, out dragCurve, out dragIndex ) &&
                       dragCurve.Points is PointPairList &&
                       dragCurve.YAxisIndex == 0 )
              {
                 zedGraphControl1.Cursor = Cursors.SizeAll;
              }
              else
              {
                  zedGraphControl1.Cursor = Cursors.Default;
              }
           }
        }

Niestety mam jeden błąd (z pozostałymi jakoś sobie poradziłem). Cytuję:

Error   1   No overload for 'zedGraphControl1_MouseClick' matches delegate 'System.Windows.Forms.MouseEventHandler' C:\[..]Form4.Designer.cs    63  49  Program

Jak to rozwiązać??

Pozostało 580 znaków

2009-01-06 23:43

Rejestracja: 16 lat temu

Ostatnio: 7 lat temu

0

Metoda zedGraphControl1_MouseClick musi być typu System.Windows.Forms.MouseEventHandler, czyli takiego:

public delegate void MouseEventHandler(
    Object sender,
    MouseEventArgs e
)

Możesz co najwyżej rzutować sender na ZedGraphControl

Pozostało 580 znaków

Odpowiedz

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0