3 Stimmen

ZedGraph - Wie macht man eine horizontale Linie ziehbar?

Ich habe einige gerade horizontale Linien, die der Benutzer vertikal ziehen können soll. Wie wäre das möglich? Ich denke, der beste Parameter für die Linienauswahl wäre eine feste Anzahl von Pixeln in der Nähe der Linie. Wenn also die Maus +/- 2 Pixel entfernt ist, sollte ich den Mauszeiger ändern und die Linie ziehbar machen Ich sehe, dass die CurveItem-Klasse die Eigenschaften IsSelectable und IsSelected hat. Haben diese eine Funktion bei der Lösung dieses Problems? Beim Lesen der Klassendokumentation kann ich nicht wirklich verstehen, wofür sie da sind.


EDITAR:

Es scheint, dass die FindNearestPoint (y FindNearestObject ) nur tatsächliche Punkte suchen. Wie würde ich die Auswahl so gestalten, dass sie entlang des gesamten Abschnitts einer geraden Linie funktioniert? Ich denke, ich müsste meine eigene benutzerdefinierte "Find"-Routine erstellen, die alle zu prüfenden Linien in einer Schleife durchläuft und für jede den imaginären Y-Punkt auf der Grundlage der X-Position der Maus berechnet ( ? ) Ich denke dabei auch an schräge Linien, bei horizontalen/vertikalen Linien wird es etwas einfacher sein. Zumindest scheint dies für ein curveItem erforderlich zu sein, aber ich nehme an, dass dasselbe für die Auswahl (im mittleren Bereich) eines LineObjs getan werden muss?

Ich wusste nicht, dass die LinienObj bestanden. Es scheint, dass es nicht möglich ist, das LineObj zu ändern. X2/Y2 Koordinaten, denn sie sind Schreibgeschützt . Ist es also überhaupt möglich, den X2/Y2-Punkt eines LineObjs zu ziehen?


EDIT 2:

Es scheint ein Problem mit dem FindNearestPoint auf einem JapaneseCandleStick-Diagramm zu sein; Wenn ich im Diagrammfenster klicke, tut es pas den Index des nächstgelegenen Balkens zurückgeben, aber ich glaube, es wählt stattdessen den Index mit dem nächstgelegenen Y-Wert aus, egal wie weit er auf der X-Achse entfernt ist. Manchmal ist es ein Balken rechts von der Maus, manchmal links von der Maus. Ist dies die Art und Weise, wie es funktionieren soll?

Ich habe diese benutzerdefinierte Funktion selbst erstellt, also ist sie wohl in Ordnung. Dennoch wäre es schön zu verstehen, warum die FindNearestPoint auf diese Weise handelt.

Dies ist der Code für mouseDown:

   ' 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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X