Chart for .NET / User's Guide / Axes / Attributes / Axis Cursors

In This Topic
    Axis Cursors
    In This Topic

    Axis cursors are similar to axis constant lines and are used to dynamically mark an axis value. Axis cursors are painted in overlay mode meaning that the chart content is not refreshed when the axis cursor value changes. That why it is recommended to use cursors instead of constant lines when you have to dynamically mark axis values on a chart that does not refresh often.

     Creating a New Axis Cursor

    You create an axis cursor by creating an instance of the NAxisCursor class and then adding it to the Cursors collection of the Axis:

    C#
    Copy Code
    NAxisCursor axisCursor = new NAxisCursor();
    axisCursor.BeginEndAxis = (int)StandardAxis.PrimaryY;
    someChart.Axis(StandardAxis.PrimaryX).Cursors.Add(axisCursor);
    
    Example Title
    Copy Code
    Dim axisCursor As New NAxisCursor()
    axisCursor.BeginEndAxis = CType(StandardAxis.PrimaryY, Integer)
    someChart.Axis(StandardAxis.PrimaryX).Cursors.Add(axisCursor)
    

    Note: You can use the BeginEndAxis property to define on which axis the cursor will scale it's begin/end values.

     Modifying the Cursor Value

    After you create the cursor you can modify its Value property:

    C#
    Copy Code
    axisCursor.Value = 10;
    
    Visual Basic
    Copy Code
    axisCursor.Value = 10;
    
     Const Line Text

    Each cursor can dispay text next to the cursor line. The following code snippet applies text to a cursor:

    C#
    Copy Code
    NAxisCursor axisCursor = new NAxisCursor();
    axisCursor.Value = 10;
    axisCursor.TextOffset = new NPointL(2, -2);
    axisCursor.TextAlignment = ContentAlignment.TopLeft;
    axisCursor.Text = "This is a cursor";
    someAxis.Cursors.Add(axisCursor);
    Visual Basic
    Copy Code
    Dim axisCursor as New NAxisCursor()
    axisCursor.Value = 10
    axisCursor.TextOffset = New NPointL(2, -2)
    axisCursor.TextAlignment = ContentAlignment.TopLeft
    axisCursor.Text = "This is a cursor"
    someAxis.Cursors.Add(axisCursor)
     Synchronizing the Cursor With the Mouse

    In order to synchronize the cursor with the mouse you have to add a special tool to the Controller.Tools collection of the control:

    C#
    Copy Code
    chartControl.Controller.Tools.Add(new NDataCursorTool());
    
    Visual Basic
    Copy Code
    chartControl.Controller.Tools.Add(New NDataCursorTool())
    

    Now when the user moves the mouse over the chart the cursor will receive notifications. Afterwards you have to touch the SynchronizeOnMouseAction property of the cursor accepting values from the MouseAction enum. The following code snippet synchronizes the cursor with the mouse position when mouse down or mouse move event occur:

    C#
    Copy Code
    axisCursor.SynchronizeOnMouseAction = MouseAction.Down | MouseAction.Move;
    
    Visual Basic
    Copy Code
    axisCursor.SynchronizeOnMouseAction = MouseAction.Down Or MouseAction.Move
    
     Snapping
    You may also want to tell the axis cursor to snap to certain positions on the axis or the axis grid. In this case you need to assign an object derived from the NAxisValueSnapper class to the ValueSnapper property of the cursor. For more information on axis value snapping please take a look at the Value Snapping topic.
     Master / Slave Axis Cursors

    When having multiple cursors on multiple axes you may encounter situations where you want two or more axis cursors to be synchronized.

    A typical example for this is a financial chart showing a stock value over time and a second chart showing the stock volume over time. You may wish to give the user the ability to move the axis cursor in the first chart and this movement should reflect the axis cursor in the second and vice versa.

    The Master / Slave axis cursor feature allows you to easily achieve this by specifying that the two axis cursors have a Master/Slave relationship.

    Each axis cursor can have slave axis cursors that automatically synchronizes their values to the value of the master.

    You can also have recursive master/slave relationship where two axis cursors are both masters and slaves to one another. In this case the axis cursor that initiates the synchronization takes priority.

    The following code synchronizes the axis cursors of the stock value and stock volume charts:

    C#
    Copy Code
    NAxisCursor stockValueAxisCursor = new NAxisCursor();
    NAxisCursor stockVolumeAxisCursor = new NAxisCursor();
    
    stockValueAxisCursor.ValueSnapper = new NAxisMajorTickSnapper();
    stockValueAxisCursor.BeginEndAxis = (int)StandardAxis.PrimaryY;
    
    stockVolumeAxisCursor.ValueSnapper = new NAxisMajorTickSnapper();
    stockVolumeAxisCursor.BeginEndAxis = (int)StandardAxis.PrimaryY;
    
    // each cursor is master of the other. When the users click on one of the
    // charts this will result in an automatic update of the other cursor
    stockValueAxisCursor.Slaves.Add(stockVolumeAxisCursor);
    stockVolumeAxisCursor.Slaves.Add(stockValueAxisCursor);
    
    chartStockValues.Axis(StandardAxis.PrimaryX).Cursors.Add(stockValueAxisCursor);
    chartStockVolumes.Axis(StandardAxis.PrimaryX).Cursors.Add(stockVolumeAxisCursor);
    
    Visual Basic
    Copy Code
    Dim stockValueAxisCursor As New NAxisCursor
    Dim stockVolumeAxisCursor As New NAxisCursor
    
    stockValueAxisCursor.ValueSnapper = New NAxisMajorTickSnapper
    stockValueAxisCursor.BeginEndAxis = CType(StandardAxis.PrimaryY, Integer)
    
    stockVolumeAxisCursor.ValueSnapper = New NAxisMajorTickSnapper
    stockVolumeAxisCursor.BeginEndAxis = CType(StandardAxis.PrimaryY, Integer)
    
    ' each cursor is master of the other. When the users click on one of the
    ' charts this will result in an automatic update of the other cursor
    stockValueAxisCursor.Slaves.Add(stockVolumeAxisCursor)
    stockVolumeAxisCursor.Slaves.Add(stockValueAxisCursor)
    
    chartStockValues.Axis(StandardAxis.PrimaryX).Cursors.Add(stockValueAxisCursor)
    chartStockVolumes.Axis(StandardAxis.PrimaryX).Cursors.Add(stockVolumeAxisCursor)
    
     Related Examples

    Windows Forms: Interactivity \ Tools \ Data Cursor Tool

    Windows Forms: Interactivity \ Tools \ Axis Scroll Tool

    See Also