Occurs when a key on the keyboard is pressed when this tool is active.

Namespace:  ESRI.ArcGIS.Desktop.AddIns

Assembly:  ESRI.ArcGIS.Desktop.Addins (in ESRI.ArcGIS.Desktop.Addins.dll) Version: 10.0.0.0 (10.0.0.0)

Syntax

C#
protected virtual void OnKeyDown(
	Tool..::.KeyEventArgs arg
)
Visual Basic (Declaration)
Protected Overridable Sub OnKeyDown ( _
	arg As Tool..::.KeyEventArgs _
)
Visual C++
protected:
virtual void OnKeyDown(
	Tool..::.KeyEventArgs^ arg
)

Parameters

arg
Type: ESRI.ArcGIS.Desktop.AddIns..::.Tool..::.KeyEventArgs

The Tool..::.KeyEventArgs instance containing the event data.

Remarks

When creating a custom tool, write the code that performs the action when a key on the keyboard is pressed when this tool is the active tool in the OnKeyDown method.

Examples

The code below shows the implementation of select features by line tool.
CopyC#
public class SelectByLineTool : ESRI.ArcGIS.Desktop.AddIns.Tool
{
  bool m_isMouseDown = false;
  ESRI.ArcGIS.Display.INewLineFeedback m_lineFeedback;

  public SelectByLineTool()
  {
  }

  protected override void OnKeyDown(ESRI.ArcGIS.Desktop.AddIns.Tool.KeyEventArgs arg)
  {
    if (arg.ModifierKeys == (System.Windows.Forms.Keys.Shift & System.Windows.Forms.Keys.Control))
      System.Windows.Forms.MessageBox.Show("Shift+Control");
  }
  protected override void OnMouseDown(MouseEventArgs arg)
  {
    IMxDocument mxDoc = ArcMap.Document;
    IActiveView activeView = mxDoc.FocusMap as IActiveView;
    IPoint point = activeView.ScreenDisplay.DisplayTransformation.ToMapPoint(arg.X, arg.Y) as IPoint;

    if (m_lineFeedback == null)
    {
      m_lineFeedback = new ESRI.ArcGIS.Display.NewLineFeedback();
      m_lineFeedback.Display = activeView.ScreenDisplay;
      m_lineFeedback.Start(point);
    }
    else
    {
      m_lineFeedback.AddPoint(point);
    }

    m_isMouseDown = true;
  }

  protected override void OnDoubleClick()
  {
    IMxDocument mxDoc = ArcMap.Document;
    IActiveView activeView = mxDoc.FocusMap as IActiveView;

    activeView.PartialRefresh(esriViewDrawPhase.esriViewGeoSelection, null, null);

    IPolyline polyline;

    if (m_lineFeedback != null)
    {
      polyline = m_lineFeedback.Stop();
      if (polyline != null)
        mxDoc.FocusMap.SelectByShape(polyline, null, false);
    }


    activeView.PartialRefresh(esriViewDrawPhase.esriViewGeoSelection, null, null);

    m_lineFeedback = null;
    m_isMouseDown = false;
  }

  protected override void OnMouseMove(MouseEventArgs arg)
  {
    if (!m_isMouseDown) return;

    IMxDocument mxDoc = ArcMap.Document;
    IActiveView activeView = mxDoc.FocusMap as IActiveView;

    IPoint point = activeView.ScreenDisplay.DisplayTransformation.ToMapPoint(arg.X, arg.Y) as IPoint;
    m_lineFeedback.MoveTo(point);
  }

  protected override void OnUpdate()
  {
    this.Enabled = SelectionExtension.IsExtensionEnabled;
  }
}
CopyVB.NET
Public Class SelectByLineTool
  Inherits ESRI.ArcGIS.Desktop.AddIns.Tool
  Private m_isMouseDown As Boolean = False
  Private m_lineFeedback As ESRI.ArcGIS.Display.INewLineFeedback

  Public Sub New()
  End Sub

  Protected Overloads Overrides Sub OnKeyDown(ByVal arg As ESRI.ArcGIS.Desktop.AddIns.Tool.KeyEventArgs)
    If arg.ModifierKeys = (System.Windows.Forms.Keys.Shift And System.Windows.Forms.Keys.Control) Then
      System.Windows.Forms.MessageBox.Show("Shift+Control")
    End If
  End Sub
  Protected Overloads Overrides Sub OnMouseDown(ByVal arg As MouseEventArgs)
    Dim mxDoc As IMxDocument = ArcMap.Document
    Dim activeView As IActiveView = TryCast(mxDoc.FocusMap, IActiveView)
    Dim point As IPoint = TryCast(activeView.ScreenDisplay.DisplayTransformation.ToMapPoint(arg.X, arg.Y), IPoint)

    If m_lineFeedback Is Nothing Then
      m_lineFeedback = New ESRI.ArcGIS.Display.NewLineFeedback()
      m_lineFeedback.Display = activeView.ScreenDisplay
      m_lineFeedback.Start(point)
    Else
      m_lineFeedback.AddPoint(point)
    End If

    m_isMouseDown = True
  End Sub

  Protected Overloads Overrides Sub OnDoubleClick()
    Dim mxDoc As IMxDocument = ArcMap.Document
    Dim activeView As IActiveView = TryCast(mxDoc.FocusMap, IActiveView)

    activeView.PartialRefresh(esriViewDrawPhase.esriViewGeoSelection, Nothing, Nothing)

    Dim polyline As IPolyline

    If m_lineFeedback IsNot Nothing Then
      polyline = m_lineFeedback.[Stop]()
      If polyline IsNot Nothing Then
        mxDoc.FocusMap.SelectByShape(polyline, Nothing, False)
      End If
    End If


    activeView.PartialRefresh(esriViewDrawPhase.esriViewGeoSelection, Nothing, Nothing)

    m_lineFeedback = Nothing
    m_isMouseDown = False
  End Sub

  Protected Overloads Overrides Sub OnMouseMove(ByVal arg As MouseEventArgs)
    If Not m_isMouseDown Then
      Exit Sub
    End If

    Dim mxDoc As IMxDocument = ArcMap.Document
    Dim activeView As IActiveView = TryCast(mxDoc.FocusMap, IActiveView)

    Dim point As IPoint = TryCast(activeView.ScreenDisplay.DisplayTransformation.ToMapPoint(arg.X, arg.Y), IPoint)
    m_lineFeedback.MoveTo(point)
  End Sub

  Protected Overloads Overrides Sub OnUpdate()
    Me.Enabled = SelectionExtension.IsExtensionEnabled
  End Sub
End Class

See Also