public override object Clone()
        {
            FieldCalculator ev = (FieldCalculator)base.Clone();

            ev._fieldName = _fieldName;
            return(ev);
        }
 public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value)
 {
     if (context != null && context.Instance != null && provider != null)
     {
         IWindowsFormsEditorService edSvc = (IWindowsFormsEditorService)provider.GetService(typeof(IWindowsFormsEditorService));
         if (edSvc != null)
         {
             FieldCalculatorCollection calculators = context.Instance as FieldCalculatorCollection;
             if (calculators != null)
             {
                 FieldCalculator ev = (FieldCalculator)value;
                 if (ev == null)
                 {
                     ev           = new FieldCalculator();
                     ev.FieldName = context.PropertyDescriptor.Name;
                 }
                 MathNodeRoot root = ev.GetExpression();
                 if (root == null)
                 {
                     root = new MathNodeRoot();
                     ev.SetExpression(root);
                 }
                 System.Drawing.Point curPoint = System.Windows.Forms.Cursor.Position;
                 rc.X = curPoint.X;
                 rc.Y = curPoint.Y;
                 IMathEditor dlg = root.CreateEditor(rc);
                 dlg.SetScopeMethod(root.ScopeMethod);
                 dlg.MathExpression             = (IMathExpression)root.Clone();
                 dlg.MathExpression.ScopeMethod = root.ScopeMethod;
                 dlg.MathExpression.EnableUndo  = true;
                 if (edSvc.ShowDialog((Form)dlg) == DialogResult.OK)
                 {
                     root = (MathNodeRoot)dlg.MathExpression;
                     ev   = new FieldCalculator();
                     ev.SetExpression(root);
                     ev.FieldName = context.PropertyDescriptor.Name;
                     value        = ev;
                     calculators.SetItem(ev);
                 }
             }
         }
     }
     return(value);
 }