1

ZedGraph には、少し異なる種類の要件があります。

ユーザーが ZedGraph ペインをクリックしたときに、ZedGraph ペインに曲線を作成したいと考えています。また、そのペインに他のグラフがプロットされています。しかし、ユーザーが zedGraph 領域をクリックするたびに、ユーザーがクリックした座標を取得し、そのクリックされた座標に直線を描画する必要があります。

次のように、FindNearestObject メソッドと一緒に MouseCLick イベントを使用しました。

private void zedGraph_RenderedTrack_MouseClick(object sender, EventArgs e)
    {
        MouseEventArgs xx = (MouseEventArgs)e;
        object nearestObject;
        int index;
        this.zedGraph_RenderedTrack.GraphPane.FindNearestObject(new PointF(xx.X, xx.Y), this.CreateGraphics(), out nearestObject, out index);
        if (nearestObject != null)
        {
            DrawALine(xx.X, Color.Red, true);
        }
    } 

しかし、これを使用して、ZedGraph はいくつかの曲線を検索し、最も近い点を見つけてから線をプロットしますが、ユーザーがクリックした場所に線を描画したいと考えています。そうする方法はありますか?

4

1 に答える 1

6

次のコードを試すことができます。このコードは、マウスクリックイベントの垂直線を描画します。

public Form1()
    {
        InitializeComponent();
    }        

    PointPairList userClickrList = new PointPairList();
    LineItem userClickCurve = new LineItem("userClickCurve");

    private void zedGraphControl1_MouseClick(object sender, MouseEventArgs e)
    {
        // Create an instance of Graph Pane
        GraphPane myPane = zedGraphControl1.GraphPane;

        // x & y variables to store the axis values
        double xVal;
        double yVal;

        // Clear the previous values if any
        userClickrList.Clear();

        myPane.Legend.IsVisible = false;

        // Use the current mouse locations to get the corresponding 
        // X & Y CO-Ordinates
        myPane.ReverseTransform(e.Location, out xVal, out yVal);

        // Create a list using the above x & y values
        userClickrList.Add(xVal, myPane.YAxis.Scale.Max);
        userClickrList.Add(xVal, myPane.YAxis.Scale.Min);

        // Add a curve
        userClickCurve = myPane.AddCurve(" ", userClickrList, Color.Red, SymbolType.None);

        zedGraphControl1.Refresh();
    }

ここに画像の説明を入力してください

userClickListを変更するだけで、水平線を描画できます。

ハッピーコーディング.....:)

于 2012-09-14T15:07:30.870 に答える