Hi,I'm trying to implement the EditTool in my own class. Using VB.NET I was able to get this working. Now I've converted to C# and can get it working. The code does not crash, but somehow the edittool is not hooked.Any ideas? public sealed class Modify : BaseCommand, ITool, IEditTool
{
#region COM Registration Function(s)
private IApplication m_Application;
private IXEIZExtension m_EditorExt;
private XEIZ.WebService.EditService m_EditService;
private IEditor m_Editor;
private string m_TableName;
private string m_FeatureID;
private IList<ARCLayerInfo> m_FeatureLayerList = new List<ARCLayerInfo>();
private ICommand m_EditCommand;
private ITool m_EditTool;
private IEditTool m_TheEditTool;
public event XEIZPlugin.Edit.ModifyVertexHandler VertexModified;
public Modify()
{
try
{
string bitmapResourceName = GetType().Name + ".bmp";
base.m_bitmap = new Bitmap(GetType(), bitmapResourceName);
}
catch (Exception ex)
{
System.Diagnostics.Trace.WriteLine(ex.Message, "Invalid Bitmap");
}
}
#region Overriden Class Methods
/// <summary>
/// Occurs when this tool is created
/// </summary>
/// <param name="hook">Instance of the application</param>
public override void OnCreate(object hook)
{
m_Application = hook as IApplication;
//Disable if it is not ArcMap
if (hook is IMxApplication)
base.m_enabled = true;
else
base.m_enabled = false;
m_EditCommand = new ControlsEditingEditToolClass();
m_EditCommand.OnCreate(hook);
m_EditTool = m_EditCommand as ITool;
m_TheEditTool = m_EditCommand as IEditTool;
}
public override bool Enabled
{
get
{
return true }
}
/// <summary>
/// Occurs when this tool is clicked
/// </summary>
public override void OnClick()
{
//Get the editor.
UID editorUID = new UIDClass();
editorUID.Value = "esricore.editor";
m_Editor = Program.App.FindExtensionByCLSID(editorUID) as IEditor;
//get a reference to editable layer
IFeatureLayer featureLayer = m_FeatureLayerList[0].pLayer as IFeatureLayer;
IFeatureClass featureClass = featureLayer.FeatureClass;
IDataset dataset = featureClass as IDataset;
IEditLayers editLayers;
//start an edit session on the selected layer
m_Editor.StartEditing(dataset.Workspace);
editLayers = m_Editor as IEditLayers;
editLayers.SetCurrentLayer(featureLayer, 0);
//set the editor task to modify features
for (int i = 0; i < m_Editor.TaskCount; i++)
{
if (m_Editor.get_Task(i).Name.ToUpper() == "MODIFY FEATURE")
{
m_Editor.CurrentTask = m_Editor.get_Task(i);
}
}
m_Application.CurrentTool = m_EditTool as ICommandItem;
m_EditCommand.OnClick();
}
#endregion
#region ITool Members
int ITool.Cursor
{
get { return m_EditTool.Cursor; }
}
bool ITool.Deactivate()
{
//unwire the event
if (m_Editor != null)
{
((IEditEvents_Event)m_Editor).OnSketchFinished -= new IEditEvents_OnSketchFinishedEventHandler(OnSketchFinished);
}
return true;
}
bool ITool.OnContextMenu(int x, int y)
{
m_EditTool.OnContextMenu(x, y);
return true;
}
void ITool.OnDblClick()
{
m_EditTool.OnDblClick();
}
void ITool.OnKeyDown(int keyCode, int shift)
{
m_EditTool.OnKeyDown(keyCode, shift);
}
void ITool.OnKeyUp(int keyCode, int shift)
{
m_EditTool.OnKeyUp(keyCode, shift);
}
void ITool.OnMouseDown(int button, int shift, int x, int y)
{
if (m_Editor.EditState == esriEditState.esriStateEditing)
{
m_EditTool.OnMouseDown(button, shift, x, y);
}
}
void ITool.OnMouseMove(int button, int shift, int x, int y)
{
m_EditTool.OnMouseMove(button, shift, x, y);
}
void ITool.OnMouseUp(int button, int shift, int x, int y)
{
m_EditTool.OnMouseUp(button, shift, x, y);
}
void ITool.Refresh(int hdc)
{
m_EditTool.Refresh(hdc);
}
#endregion
#region IEditTool Members
object IEditTool.EventSource
{
get { return m_TheEditTool.EventSource ; }
}
#endregion
}
}