我有一些筆直的水平線,我希望用戶能夠垂直拖動。這將如何成爲可能?我認爲線選擇的最佳參數是線附近的固定數量的像素。所以如果鼠標是+/- 2像素,我應該改變鼠標光標,並使行可拖拽..我看到CurveItem類具有屬性IsSelectable和IsSelected。這些在解決這個問題上有什麼功能?我真的不能明白他們是什麼從閱讀類的文檔..ZedGraph - 如何製作水平線拖拽?
編輯:
看來,FindNearestPoint(和FindNearestObject)只搜索實際點。我如何讓選擇沿着整條直線工作?我想我需要做出自己定製的「Find」例程,它循環遍歷我想要檢查的所有行,並且對於每個計算它都是基於鼠標X位置的虛擬Y點(?)我也是爲此目的考慮傾斜線,對於水平/垂直線,它會稍微簡單一些。至少看起來這是curveItem所需要的,但我認爲必須完成相同的選擇(在中間部分)LineObj?
我其實不知道LineObj存在。看起來LineObj不可能改變座標,因爲它們是只讀。那麼是否可以拖動LineObj的X2/Y2點?
編輯2:
這似乎是與FindNearestPoint上JapaneseCandleStick圖的問題;當我單擊圖形窗格時,它不會而不是返回最近的條形圖的索引,但我相信它會選擇具有最接近的Y值的索引,而不管它在x軸上有多遠。有時候,它是鼠標右側的欄,有時候位於鼠標左側。這是它的工作方式嗎?
我自己製作了這個自定義函數,所以我猜這沒關係。仍然很好理解爲什麼FindNearestPoint這樣做。
這是鼠標按下代碼:
' Find nearest curve point:
Dim ciNearestCurve As CurveItem
Dim iNearestCurve As Integer
Dim b As Boolean = zgc.GraphPane.FindNearestPoint(mousePt, zgc.GraphPane.CurveList, ciNearestCurve, iNearestCurve)
If b Then
With ciNearestCurve(iNearestCurve)
Debug.Print(Date.FromOADate(.X) & " " & .Y & " " & .Z)
End With
謝謝!一般來說,這看起來很管用但我不確定一些事情;請看我上面的編輯..(這裏沒有足夠的空間) – bretddog 2010-10-02 09:51:28
看到我的編輯,希望它會有幫助 – Gacek 2010-10-02 10:25:19
乾杯!我可以看到這個邏輯。但是,這種選擇只會觸發LineItem或LineObj上的實際數據點嗎?我期待着擴大這個範圍,使得可以在「顯示」行的任何圖表點上選擇一行,而不僅僅是接近組成行數據的實際(兩個)端點。這是否需要我制定一個自定義Find方法,該方法根據每條線的端點檢查一個虛構插值點? 啊,似乎我沒有詳細閱讀LineObj..Y2。現在有道理:) – bretddog 2010-10-02 11:13:06